我正在開發一個項目,我需要以下內容。在服務器側(.NET 3.5) 沒有證書的WCF用戶名
- WCF服務
我有一個現有的應用程序,我使用的身份驗證和授權來自(在服務器端)。我還需要在WCF服務的Thread Principal(一個站點對象)中存儲一些關於用戶的元數據。我這樣做是爲了讓我可以在WCF服務中得到它,如果我絕對必須的;一些業務邏輯可能需要它。所以我的計劃是要做到以下幾點...
爲服務器創建一個自定義的ServiceAuthorizationManager,然後在那裏我將登錄用戶並從現有應用程序獲取角色。我將緩存「Site」對象,並在進一步請求從緩存中拉出時。我還需要一個CustomPrincipal對象來保存我的自定義數據。我想冒充用戶,這樣我可以使用WCF這樣的過濾內置的角色:
[PrincipalPermission(SecurityAction.Demand, Role = "Role1")]
public string[] RolesForUser(string username){}
我試圖使用ASP.NET授權使用自定義角色的供應商,但我不能設置現任校長的任何事情。我也嘗試使用自定義IAuthorizationPolicy,但出現問題。這些問題涉及能夠使用WCFClient.exe應用程序,當它發現(使用mex endpoing)它不會提供任何憑據,因此登錄將失敗。我最終決定ServiceAuthorizationManager是正確的路,但我願意接受其他建議。
在客戶端,我將收集憑據並將它們放入WCF代理類中,如下所示。
proxy.ChannelFactory.Credentials.UserName.UserName = userName;
proxy.ChannelFactory.Credentials.UserName.Password = password;
當我開始走這條路,我發現我不能在我的經理類的CheckAccessCore方法來獲取用戶名/密碼。進一步的調查顯示,我應該真的在自定義的UserNamePasswordValidator中進行身份驗證。所以我創建了其中一個。問題是驗證方法從未被調用過。
進一步調查表明,爲了驗證方法被調用,我的WCF服務必須具有消息或傳輸級別的安全性。問題在於,我無法弄清楚如何在沒有X.509證書的情況下獲得消息或傳輸級別的安全性。該產品將進入數百個令人難以置信的鎖定機器,並且不可能安裝證書。
有沒有辦法做我沒有安裝證書要求?