2016-10-15 17 views
0

У меня есть веб-приложение Asp.net с аутентификацией JWT с использованием программного обеспечения OWIN. Мой сервер ресурсов и сервер авторизации одинаковы. Я могу получить токен из конечной точки маркера. Проверены методы ValidateClientAuthentication и GrantResourceOwnerCredentials. Однако, когда я пытаюсь получить доступ к защищенному (с помощью [Авторизовать]) api (с заголовком авторизации, установленным на токен-носитель), я получаю только «Авторизация была отклонена для этого запроса».Не могу понять, если OWIN перехватывает запросы на api от клиента

У меня есть переопределенный метод ValidateAuthorizeRequest, чтобы узнать, попадает ли он, когда вызов api производится через почтовый клиент. Однако он никогда не попадает.

Я пытаюсь выяснить, действительно ли OWIN перехватывает вызовы на api, кроме вызовов конечной точки маркера.

Есть ли способ или методы для переопределения, чтобы я мог отлаживать и видеть, где в конвейере отклоняется запрос и почему.

На данный момент я звоню через Почтальон и получаю несанкционированный отклик.

Любая помощь была бы принята с благодарностью.

+0

Два вопроса: 1. Есть ли связать WebAPI конфигурации в Owin классе запуска? 2. Можете ли вы получить доступ к api без [Авторизовать] –

+0

1) Да. Я привязываю конфигурацию webapi в классе запуска owin, как показано в коде, опубликованном в другом вопросе. 2) Да, когда я удаляю атрибут [Авторизовать] его доступным. – tariq

+0

@MarcusH Я сделал обновление к вопросу, основанному на попытках, которые я сделал с тех пор. Я переопределил метод MatchEndpoint класса OAuthAuthorizationServerProvider. Этот метод вызывается для каждого запроса, чтобы проверить, находится ли запрос на конечной точке маркера или разрешить конечную точку. К моему удивлению, 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