我開發一個web服務它必須符合給定應用所需的WSDL規範,其中每一個SOAP請求攜帶清晰,純文本用戶名和密碼 (我知道這是一個非常糟糕的主意,但那不是我的設計選擇)。現在,我必須通過針對有效憑證的數據庫檢查這些憑據來驗證對我的服務方法的每次調用。我聽說過WCF的UserNamePasswordValidator
,但根據我的理解,只有當證書通過SOAP頭傳遞時才適用,但它們不是。我在這裏有什麼選擇?在消息的主體證書WCF認證
回答
你知道這是一個壞主意,所以我不會質疑你的設置:-)
如果你的用戶名和密碼以明文形式發送過線你的肥皂身體裏面,簡單的使用信息以手動驗證您的數據庫實例。取出用戶名和密碼並用SQL查詢驗證(或其MD5散列),只有在數據庫中找到值時才返回一行。當該行返回時,您知道用戶已通過身份驗證。
我在這裏有什麼選擇?
在這種情況下您需要做的是爲您的服務實施自定義授權管理器。這並不難,因爲我之前做過幾次。簡而言之,您將您的服務配置爲指向一個名爲CheckAccessCore
的新重寫方法,您可以在其中執行授權邏輯。您應該能夠檢查上下文和消息正文以獲取您需要的任何憑據。有一點需要了解的是是在這一點上對檢查郵件正文有一些性能影響,但是如果你沒有選擇,至少有一個工作解決方案就足夠了。
這一切都發生在之前被調用的實際方法被執行,這是有效的,因爲如果方法沒有被授權,該方法永遠不會被調用。
所以這裏可能是一個典型的配置(一些其他配置冷落爲了簡潔):
<behaviors>
<serviceBehaviors>
<behavior name="MySvcBehavior">
<serviceAuthorization serviceAuthorizationManagerType="MyWCFService.CustomAuthorizationManager, MyWCFService" />
</behavior>
</serviceBehaviors>
<behaviors>
在你的,你可能有類似的東西在下面,或者用你自己的需要來檢查服務代碼郵件正文:
public class CustomAuthorizationManager : ServiceAuthorizationManager
{
protected override bool CheckAccessCore(OperationContext operationContext)
{
IIdentity primaryIdentity = operationContext.ServiceSecurityContext.PrimaryIdentity;
if (primaryIdentity.Name == "user1")
{
return true;
}
else
{
return false;
}
}
}
這裏是一些特別的筆記從我的代碼從MSDN包括:在Windows通訊基礎(WCF)身份驗證模型的基礎設施支持可擴展基於聲明的authorizat離子模型。索賠是從令牌中提取的,並可以通過自定義授權策略進行處理,然後放入AuthorizationContext中。授權管理者檢查AuthorizationContext中的聲明以作出授權決定。默認情況下,授權決策由ServiceAuthorizationManager類進行;但是,通過創建自定義授權管理器可以覆蓋這些決定。要創建自定義授權管理器,請創建一個從ServiceAuthorizationManager(此類)派生的類並實現CheckAccessCore方法(在此類中完成)。授權決策在CheckAccessCore方法中進行,該方法在授予訪問權限時返回「true」,並在拒絕訪問時返回「false」。
這裏有(2)其他鏈接,例如。第一個是在方法中使用聲明的MSDN鏈接。只要記住,你可以做任何你需要在CheckAccessCore
內。它只需要最後返回true
或false
。第二個鏈接來自我的博客,我有一個完整的實現,但使用Windows身份驗證。再一次,您的詳細信息將檢查郵件正文以獲取CheckAccessCore
方法中所需的詳細信息。
如何:
http://msdn.microsoft.com/en-us/library/ms731774.aspx
如何:創建ASP.NET風格的Windows身份驗證策略WCF服務:
http://allen-conway-dotnet.blogspot.com/2010/01/how-to-create-aspnet-windows.html
- 1. 證書WCF消息安全
- 2. WCF和需要證書的認證?
- 3. WCF雙向證書認證中的證書
- 4. WCF服務與證書認證:
- 5. WCF客戶端證書認證
- 6. 證書在WCF
- 7. WCF消息加密沒有身份驗證/授權或證書
- 8. WCF入門WCF證書認證路由 - 卡在XML地獄
- 9. WCF中的證書驗證
- 10. CVS證書認證
- 11. SSL證書認證
- 12. 沒有證書存儲的WCF證書
- 13. TLS握手「證書」消息中的多個證書
- 14. Twitter的認證證書
- 15. 沒有客戶端證書的WCF消息/方法安全
- 16. 在WCF和證書認證中流式傳輸MTOM附件
- 17. WCF證書認證,無需安裝在客戶端
- 18. WCF服務 - 使用用戶名驗證的證書和消息安全性
- 19. 使用用戶名認證和無證書的TCP上的WCF
- 20. WCF證書鏈信任認證:「調用者未被服務認證。」
- 21. 基於證書的WCF認證結果retreival
- 22. 帶有證書認證的iPhone Web服務調用WCF服務
- 23. 指定頁面上的IIS MVC/WCF證書認證
- 24. WCF,證書認證 - 常見錯誤和混亂的參數
- 25. 驗證在SNS消息中給出的證書SigningCertURL
- 26. 使用證書編程WCF消息安全
- 27. WCF消息級別安全性客戶端證書
- 28. WCF與WSHttpBinding,消息安全,clientCredentialType =「用戶名」證書SelfHosted問題
- 29. WCF證書問題
- 30. wcf服務證書