我正在實施一個安全的WCF服務。身份驗證是使用用戶名/密碼或Windows憑據完成的。該服務託管在Windows服務進程中。現在,我試圖找出爲每個服務操作實施授權的最佳方式。WCF服務授權碼
例如,請考慮以下方法:
public EntityInfo GetEntityInfo(string entityId);
正如你可能知道,在WCF中,有一個的OperationContext對象,從中可以獲取調用者/客戶端傳遞的安全證書。現在,在調用方法的第一行時,認證已經完成。但是,如果決策取決於輸入數據本身,我們如何實現授權?例如,在上述情況下,說'管理員'的用戶(其權限等存儲在數據庫中),允許獲取實體信息,其他用戶不應該被允許...我們在哪裏進行授權檢查?
說我們把它放在方法的第一行,像這樣:
CheckAccessPermission(PermissionType.GetEntity, user, entityId) //user is pulled from the current OperationContext
現在,有幾個問題:
難道我們驗證ENTITYID(例如檢查空值/空值等)在授權檢查之前或在授權檢查內?換句話說,如果授權檢查應該包含在每個方法中,那麼這是一個好的模式嗎?哪一個應該首先發生 - 參數驗證或授權?
當授權檢查遍佈此地時,我們如何單元測試WCF服務,並且我們在單元測試中沒有OperationContext!? (假設我試圖直接測試這個服務類的實現,沒有任何WCF設置)。
任何想法傢伙?
謝謝保羅。與第一次做授權,問題是這樣的: 我們如何授權用戶如果我們需要檢查基於輸入參數的權限?在我們使用它進行授權之前,我們不需要首先驗證這些論據嗎? – Krishna 2008-09-28 03:52:39