2008-12-16 71 views
2

我有一個Web服務(WCF或ASMX無所謂)...我做了一個控制檯應用程序,右鍵單擊,增加服務參考。到現在爲止還挺好。ASP.NET兼容模式下的WCF服務 - 什麼是最簡單的方式來傳遞用戶名/密碼

但是,我不能爲我的生活傳遞「安全」證書到我的服務。這是我的客戶端代碼:

var client = new MyClient(); 

client.ClientCredentials.UserName.UserName = "bob"; 
client.ClientCredentials.UserName.Password = "123!!"; 

client.HelloWorld(); 

client.Close(); 

但在服務器上,無論我做什麼(上下車,WCF服務,ASMX服務,自定義HTTP處理程序等aspnetcompant模式)......我無法找到'鮑勃:123 !!'任何地方。不在頭文件中,不在HttpContext.Current.User.Identiy.Name中,而不在Thread.CurrentPrincipal中...沒有。

我在這裏錯過了什麼?

回答

2

是的我有,顯然如果你不使用SSL,.Net會拋出一個異常。所以顯然你不能做我想要的沒有SSL。

+0

有了框架,您使用?WCF/SSL在3.5(或SP1)中發生了一些變化 – 2008-12-21 11:01:14

0

您是否在端點綁定上配置了UserName(消息安全性)或Basic(傳輸安全性)客戶端憑證類型?

0

從我的理解,WCF做消息級別的身份驗證,而不是集成的身份驗證。在任何情況下,我不知道將憑據傳遞的東西,你可以不使用SSL做...

你試過(通過IIS)打開匿名身份驗證的端點?據我所知,WCF使用消息級安全性(在消息頭中傳遞的用戶名/密碼)而不是HTTP頭(用於集成身份驗證方法,如Windows集成,SPNego等)

我發現的一些鏈接...

0

如果我正確理解你的問題,您已成功配置我們一個WCF服務的ername身份驗證(對不起,我將重點介紹WCF),並且希望在您的服務方法中訪問用戶名和密碼。

您可以通過訪問ServiceSecurityContext.Current.PrimaryIdentity的用戶名,我不相信你可以輕鬆地訪問密碼。

一個建議我在網上找到的,我真的不喜歡,是你的自定義驗證,以保持用戶名和密碼的字典,這你可以從一個用戶名後面的代碼中訪問。

我不喜歡這個,原因有幾個 - 其中一個 - 你不應該真的有權訪問密碼,兩個 - 我不知道這是多麼安全,三個 - 如果可能有重複的用戶名(我知道一些系統在這種情況下),你最終可能會得到錯誤的系統。

4

你檢查這篇文章的自定義驗證:http://www.leastprivilege.com/FinallyUsernamesOverTransportAuthenticationInWCF.aspx

此外,當我開始處理這件事時,有一件事幫助我禁用匿名訪問Web服務器的該目錄。當您未通過身份驗證時,HttpContext.Current.User.Identity.Name始終會返回一個空字符串。因此,它可能看起來像你正在進行身份驗證,只是不能「找到」用戶名,但實際上你是匿名登錄的。至少在禁用匿名訪問的情況下,您將會遇到異常,並且可以更輕鬆地找出身份驗證方面,這是最難的部分。

0

你有沒有試過訪問它? (特別是如果你使用的是自己的認證系統和你自己的UsernamePasssword和證書驗證。

System.ServiceModel.ServiceSecurityContext.Current.PrimaryIdentity.Name 

你可以得到來電者的名字,但沒有密碼。

相關問題