2010-11-03 26 views
2

我有以下的情況(輪廓):WCF AuthorizationPolicy:模擬問題

授權Webservice的
此服務被調用和驗證(通過執行給定的業務邏輯)用戶是否有效或無效。

自定義業務Webservice的
這是一個商業應用創造了一些Web服務,即爲了驗證其稱爲業務web服務帳戶在內部調用了「授權web服務」。

我通過在我的「自定義業務Web服務」中使用WCF服務授權來實現此邏輯。基本上我配置了

<serviceAuthorization principalPermissionMode="Custom"> 
    <authorizationPolicies> 
     <add policyType="MyCompany.Authorization.WCF.AuthorizationPolicy, MyCompany.AuthorizationDll"/> 
    </authorizationPolicies> 
</serviceAuthorization> 

AuthorizationPolicy內部調用「授權Web服務」。

的問題
的問題是,我需要冒充我的「自定義業務web服務」的來電。客戶端身份是正確的,但WindowsIdentity是應用程序池用戶的身份。
請注意,如果我使用[OperationBehavior(Impersonation = ImpersonationOption.Required)]而不是它在授權政策的Evaluate(...)方法中不,模擬在服務本身內工作。

(我使用傳輸級安全使用Windows身份驗證憑據,很明顯)

任何人有我如何能模仿之前進入IAuthorizationPolicy.Evaluate(...)方法調用者的任何線索?

回答

3

它總是再次感到有點奇怪,回答我自己的問題,但爲了分享我與其他人分享的內容,我將在此發佈「解決方案」。

我會盡量長話短說:

  1. 冒充在IAuthorizationPolicy.Evaluate(...)是不可能的。 (S4U2Self可能工作,沒有測試,因爲我沒有這個選項)

正如我已經提到的,通過放置[OperationBehavior(Impersonation = ImpersonationOption.Required)]來模擬webservice操作中的調用者。所以調用我的自定義web服務來檢索委託人作爲服務操作中的第一條語句將始終有效。但我不喜歡這種方法。
作爲一種替代方法,我嘗試在模擬終止工作的WCF服務操作的調用鏈中找到最新的可能點。這是我找到OperationInvoker的地方。

下圖顯示了呼叫到達實際操作(從here拍攝)之前完成分派的順序:
alt text

參數檢驗爲時過早,模擬還不工作,但它幸運地在Operation Invoker中工作。所以通過編寫自定義操作調用器並將所有內容包裝到自定義操作行爲屬性中,我能夠優雅地解決問題。

更多關於blog post I wrote的信息。