2010-01-14 89 views
9

我需要將NetworkCredential對象與當前模擬用戶的憑據傳遞給來自asp.net應用程序的Web服務。
我的代碼如下所示:模擬和NetworkCredential

WindowsIdentity windowsIdentity = HttpContext.Current.User.Identity as WindowsIdentity; 
WindowsImpersonationContext context = windowsIdentity.Impersonate(); 
try { 
    var client = GetClient(); 
    client.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; 
    Log("WindowsIdentity = {0}", windowsIdentity.Name); 
    Log("DefaultNetworkCredentials = {0}", CredentialCache.DefaultNetworkCredentials.UserName); 
    client.DoSomething(); 
} finally { 
    context.Undo(); 
} 

我的理解是CredentialCache.DefaultNetworkCredentials應該給當前模擬用戶的憑據,但事實並非如此。
日誌消息我得到的是

WindowsIdentity = TESTDOMAIN\TESTUSER 
DefaultNetworkCredentials = 

我做錯什麼了嗎?如果是這樣,你如何獲得當前模擬用戶的NetworkCredential對象?

+3

這不是雙跳問題的表現嗎? http://blogs.msdn.com/knowledgecast/archive/2007/01/31/the-double-hop-problem.aspx – Richard 2010-01-14 10:38:43

+0

是的,似乎與雙跳問題有關,因爲您將在第二個令牌中ASP不會給你網絡憑證。 – 2010-01-14 11:30:12

回答

4

在MSDN稍長的文章,解釋的選項來獲得ASP的網絡憑據:

How To: Use Impersonation and Delegation in ASP.NET 2.0

的話題另一個博客文章(雖然我沒有檢查是否解決方案實際工作:

.NET (C#) Impersonation with Network Credentials

+0

我問一個相關的問題,你會請檢查它:http://stackoverflow.com/questions/18842970/asp-net-imperonate-in-netframework-2-vs-netframework-4 – 2013-09-17 07:28:31

+0

第二篇文章定義了一個類,它需要密碼將作爲參數輸入併發送。我認爲模擬的好處是在Windows身份驗證模式下可以使用委託人和身份來訪問網絡資源。正如下一張海報所說的,簡單的方法不可能超越本地機器(沒有kerberos,這不是簡單的...) – Thronk 2013-10-07 20:07:11

1

這是不可能使用asp.net模擬用戶(Current.User.Identity)網絡認證,它只能在本地。