2010-12-10 92 views
0

我想讓遠程管理員(具有本地或域憑據)通過WCF TCP綁定來控制我的Windows服務。爲此,我需要以管理員身份驗證遠程用戶。我可以檢查主要用戶/角色,但我不知道如何提示遠程用戶輸入正確的用戶詳細信息/標記。受限制的遠程WCF服務:Windows身份驗證提示

這與我之前的問題Restricting WCF TCP endpoint to Administrators有關。而不是增加[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]以我有限的服務方法和受涼SecurityException的,看來我可以檢查它:

if (!System.Threading.Thread.CurrentPrincipal.IsInRole("Administrators")) 
    return MethodResult.AccessDenied; 
// haven't tested if it's the service thread or the remote user yet. 

如何提示Windows身份驗證的遠程用戶如果拒絕訪問結果返回,所以我可以作爲不同的委託人重新啓動連接?

當然,更改需要在遠程用戶的客戶端應用程序上生效。也許有一個更清潔的WCF方式來做到這一點?


編輯:搜索 「.NET冒充」 導致我this CodeProject上。沒有機會看,但這可能是要走的路。

回答

1

您需要在用戶的憑據中傳入WCF調用。通常,客戶端應用程序只是「捕獲」當前正在運行的用戶的憑據。或者,您可以明確指定用戶名和密碼。因此,如果您願意,您可以提示用戶輸入另一組憑據。

無論哪種方式,客戶端應用程序需要提示用戶。在授權失敗時,您的WCF調用應該返回一個錯誤(代碼或異常),並且您的客戶端應該捕獲該返回並向用戶顯示提示並使用新憑據重試。 WCF本身無法處理提示用戶。

這裏是傳遞憑據的各種手段的一篇文章:
http://blogs.msdn.com/b/sonuarora/archive/2007/04/21/setting-client-credentials.aspx

+0

謝謝。 [這個問題](http://stackoverflow.com/questions/1596161/how-to-show-authentication-dialog-in-c-net-3-5-sp1)提供了一個本機提示,雖然有一個老樣子。 – 2010-12-10 13:22:39

0

假設這是託管在IIS中,您需要關閉IIS管理器中的匿名身份驗證。這應該強制用戶使用Windows帳戶登錄到計算機。您可能還需要啓用ASP.NET模擬。

+0

沒有標準的Windows對話框提示用戶,這是一個Windows服務和客戶端是一個Windows窗體應用程序。所以沒有IIS。 – 2010-12-10 12:40:14