2011-10-19 152 views
3

我有一個自定義的ServiceAuthorizationManager,其中我重寫CheckAccess並驗證作爲URL一部分的自定義身份驗證令牌。我驗證後,我設置了一個GenericPrincipal的Thread.CurrentPrincipal。但是,當請求最終到達我的服務方法時,Thread.CurrentPrincipal就消失了,它不是我在auth管理器中設置的。 怎麼回事?WCF服務授權管理器設置Thread.CurrentPrincipal

回答

6

我解決這個通過了在我註冊服務AUTH管理服務行爲設置principalPermissionMode =「無」。這應該告訴wcf運行時不要在當前線程中放置任何主體。如果將其設置爲「自定義」,則會覆蓋使用GenericPrincipal設置的任何主體。

+0

那麼你如何做你提到的自定義auth?這可能使用「None」的PrincipalPermissionMode? –

+0

我在登錄過程中發送一個驗證票,客戶會跟蹤它並在後續服務中使用它。如果authticket無效,我只需從我的ServiceAuthorizationManager實現中返回false。如果有效,我在currrent線程上設置一個通用主體。如果您未將principalPermissionMode設置爲None,那麼您剛剛設置的通用主體將被覆蓋在該行的某處。 – sash

1

如果您不希望使用內置機制進行授權,WCF要求通過IAuthorizationPolicy標識當前主體,以便在WCF管道中正確集成。您需要指定'Custom'的PrincipalPermissionMode。

有關詳細介紹請參閱這篇文章:Authorization In WCF-Based Services