類似的問題已經回答here,但答案似乎不適用於我的情況。如何使用自定義身份驗證和內存中的主機進行ASP.NET Web API集成測試
我想測試我的Web Api中使用JWT認證的認證/授權過程。
我的身份驗證通過我添加到我的HttpConfiguration
的自定義MessageHandler
來處理。通過控制器/方法上的簡單[Authorize]
屬性處理授權,以限制對其的訪問。
我設置我已經從我的令牌認證過程中提取這種方式的主要(在我的自定義MessageHandler
):
Thread.CurrentPrincipal = principal;
if (HttpContext.Current != null)
{
HttpContext.Current.User = principal;
}
這整個過程工作正常,當我在本地IIS手動測試。
但隨着在內存中的託管樣進行測試時here 的ApiController.User
屬性存儲被用於授權與[Authorize]
得到我的電話測試Thread.CurrentPrincipal
(我當前會話窗口負責人)委託,而不是一組在認證期間。 如果我將我的Thread.CurrentPrincipal
設置爲null,那麼我只能得到不好的請求。
TL; DR如何測試我的認證/授權管道與存儲託管 ?由於它在我的測試中將ApiController.User
值設置爲Thread.CurrentPrincipal
的值,並且沒有獲得我在驗證過程中成功設置的值。
我想我可以設法解決自定義[Authorize]
屬性獲取Thread.CurrentPrincipal
而不是ApiController.User
,但我想避免這種情況。
在此先感謝。
編輯澄清:所有此管道(認證然後授權)正常運行良好託管在運行的IIS(HttpContext在內存中爲null)。我只是試圖在內存託管中測試它(如果可能的話)。在內存託管測試期間,在我的自定義MessageHandler
中放置斷點時,我可以看出Thread.CurrentPrincipal
設置正確,只是[Authorize]
似乎並不在意,因爲在我的ApiControllers中ApiController.User
屬性已經設置爲在我的測試我Thread.CurrentPrincipal
值的值(我的本地Windows會話本金)
其中的ASP.NET Web API的版本你在這裏用嗎?你能發佈驗證請求的消息處理程序代碼嗎? – tugberk
我使用ASP.NET Web API 2.1和[這裏](https://github.com/jamiekurtz/JwtAuthForWebAPI/blob/master/src/JwtAuthForWebAPI/JwtAuthenticationMessageHandler.cs),你可以找到一個有點類似的消息處理程序來驗證請求(ligne 110我沒有使用PrincipalTransformer,而是直接從tokenHandler.ValidateToken分配主體) – Dace