2016-05-24 231 views
0

我有使用WebApi 2應用程序進行認證和授權的MVC前端應用程序。我正在使用JWT令牌。到目前爲止,我已經能夠成功驗證和接收令牌......我可以通過使用POSTMAN工具向頭添加授權令牌來進一步訪問受限資源([Authorize]屬性)。JWT令牌和Owin認證

Authorization: 「Bearer <jwt.token.string>」 

問題是,我無法攔截MVC管道中的調用以將標記添加到httpHeader中。它總是將我路由回登錄頁面。當我使用POSTMAN工具時不是這種情況。我曾嘗試失敗在以下幾點注入令牌:

  • 延長授權使用自定義實現
  • 屬性添加自定義ActionFilterAttribute
  • 添加自定義DelegatingHandler
  • Owin管道在Startup.cs使用StageMarker(PipelineStageAuthenticate)

在上述所有情況下,由於我可以進行調試,所以我遇到了該事件。我有強烈的懷疑,我在設置我的標題之前點擊授權點,但我無法弄清楚順序的流程,以正確攔截HttpContext對象並注入授權標頭。

回答

0

認證成功後,添加

var ctx = Request.GetOwinContext(); 
      var authenticateResult = await ctx.Authentication.AuthenticateAsync(DefaultAuthenticationTypes.ExternalBearer); 
      ctx.Authentication.SignOut(DefaultAuthenticationTypes.ExternalBearer); 
      var applicationCookieIdentity = new ClaimsIdentity(authenticateResult.Identity.Claims, DefaultAuthenticationTypes.ApplicationCookie); 
      ctx.Authentication.SignIn(applicationCookieIdentity); 

這將創建一個簽名的cookie和你的授權屬性將自動讀取cookie。隨後您的所有請求都將被授權。