2016-10-15 27 views
0

我有一個使用OWIN中間件進行JWT認證的Asp.net webapi。 我的資源服務器和授權服務器是相同的。我能夠從令牌端點獲取令牌。已成功命中ValidateClientAuthentication和GrantResourceOwnerCredentials方法。 但是,當我嘗試訪問一個受保護的(使用[Authorize])api(授權頭設置爲承載令牌)時,我只會得到「該請求的授權已被拒絕」。無法弄清楚OWIN是否攔截客戶端對api的請求

我已經重寫了ValidateAuthorizeRequest方法來查看它是否在通過Postman進行api調用時被命中。然而它從未被擊中。

我想弄清楚一種方法,看看是否在所有的OWIN攔截調用API的調用,而不是調用令牌端點。

是否有任何方法或方法重寫,以便我可以調試並查看管道中哪些地方的請求被拒絕以及爲什麼。

截至目前,我通過郵遞員打電話並獲得未經授權的回覆。

任何幫助將不勝感激。

+0

兩個問題:1。你綁定在owin啓動類的WebAPI配置? 2.可以在沒有[Authorize] –

+0

的情況下訪問api 1)是的,我在owin啓動類中綁定了webapi配置,如另一個問題中發佈的代碼所示。 2)是的,當我刪除它的可訪問的[授權]屬性。 – tariq

+0

@MarcusH我根據自那時以來的嘗試對問題進行了更新。我已覆蓋OAuthAuthorizationServerProvider類的MatchEndpoint方法。每個請求都會調用此方法以查看請求是在標記端點還是授權端點上。令我驚訝的是IsTokenEndpoint實現時,我擊中的令牌,但IsAuthorizeEndpoint從來沒有真正的其他請求,我想它應該是。意味着它沒有檢測到呼叫在授權端點上 – tariq

回答

0

如果沒有看到你做了什麼,這很難回答。 我想知道你是否已經正確地接線了。啓動類是您定義提供程序和令牌格式的位置,然後您將應用程序設置爲使用這些設置。這裏有一個例子:

public class Startup 

    {  
     public void Configuration(IAppBuilder app)  
     {  
      var config = new HttpConfiguration();  
      config.MapHttpAttributeRoutes();  
      ConfigureOAuth(app);  
      app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);  
      app.UseWebApi(config);  
     }   

     public void ConfigureOAuth(IAppBuilder app)  
     {  
      int accessTokenExpiresInSeconds = ConfigurationHelper.GetAppSetting("AccessTokenExpirationInSeconds").ToInt();    
      var oAuthServerOptions = new OAuthAuthorizationServerOptions 

      {  
       AllowInsecureHttp = true, 

       TokenEndpointPath = new PathString(ConfigurationHelper.GetAppSetting("TokenEndPoint")), 

       AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(accessTokenExpiresInSeconds), 

       Provider = new CustomOAuthProvider(), 

       AccessTokenFormat = new CustomJwtFormat(ConfigurationHelper.GetAppSetting("TokenIssuer"))  
      };   

      app.UseOAuthAuthorizationServer(oAuthServerOptions);  
     }  
    } 

如果這不是問題,那麼你可以使用自己的OAuth2上JWT和文章中,我已經有了如何一切都建立一個完整的示例,代碼是在GitHub上。希望它會引導你在正確的方向:

https://eidand.com/2015/03/28/authorization-system-with-owin-web-api-json-web-tokens/

+0

這裏是我發佈的實際問題的鏈接。它包含代碼。 http://stackoverflow.com/questions/40019247/authorization-has-been-denied-for-this-request-using-jwt – tariq