2010-08-24 62 views
0

當詢問this question,this questionthis question時,我似乎在吠叫錯誤的樹。如何在WCF中進行用戶名/密碼身份驗證,並使用會話關聯?

我需要根據自定義API(在COM中)對用戶進行身份驗證,並且需要保留該定製API(COM對象)存在(對於該用戶)for future WCF calls。在針對該自定義API進行身份驗證期間,我可以獲取custom-defined roles的列表。我也想用這些來授權服務方法。

此外,我需要能夠遠程revoke the user's session。這是由COM API引發的事件觸發的。

我有一個自定義的UserNamePasswordValidator,但它似乎沒有正確設置自定義主體的機制,所以它看起來像我朝着錯誤的方向前進。

我該如何做這三件事?

回答

0

使用自定義授權策略進行此操作的範圍爲here

1

您可以在您的服務中完全處理驗證。創建類似於:

[ServiceContract(SessionMode=SessionMode.Required)] 
public interface IService 
{ 
    // All your operations marked with [OperationContract(IsInitiating=false, IsTerminating=false)] 

    // Two additional operations 
    [OperationContract(IsInitiating=true, IsTerminating=false)] 
    void Login(string user, string password); 

    [OperationContract(IsInitiating=false, IsTerminating=true)] 
    void Logout(); 
} 

執行此合同的服務必須具有PerSession實例。在Login方法中實現身份驗證並將COM對象存儲在本地字段中。當新客戶想要使用這種服務時,他必須先調用Login方法。所以你的所有實例都將被正確的認證,並且它們將存儲它們的COM對象的實例。

您還可以將InstanceContext和COM對象註冊到某個全局類,它將處理強制查殺服務實例。這可能需要一些研究才能實現。

請確保您使用某種安全綁定(加密),因爲您將以純文本形式發送用戶名和密碼。

+1

有用,但有沒有什麼辦法可以用它來做[PrincipalPermission]的東西?或者我必須強制執行嗎? – 2010-08-24 13:23:43

+0

此解決方案不使用角色基礎安全性。如果你想使用基於聲明式角色的安全性,你必須深入到WCF內部 - 比我們回到定製授權策略。 – 2010-08-24 13:46:15

相關問題