2016-03-30 4 views
1

Я потратил немало времени на то, чтобы заставить приложение WebApi использовать модель проверки подлинности Owin, поскольку я хочу использовать все методы входа в социальные сети. Моя непосредственная проблема заключается в понимании того, что я делаю неправильно в отношении аутентификации вызывающего пользователя с набором токенов-носителей.Текущий директор не установлен при использовании Owin JwtBearerAuthentication и OAuthAuthorizationServer

Мои Startup.Auth была подрезают только следующее:

OAuthManager.OAuthBearerOptions = new OAuthBearerAuthenticationOptions(); 

     OAuthManager.OAuthServerOptions = new OAuthAuthorizationServerOptions() 
     { 
      AllowInsecureHttp = true, 
      TokenEndpointPath = new PathString("/oauth/token"), 
      AuthorizeEndpointPath = new PathString("/oauth/externallogin"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromHours(1), 
      AccessTokenFormat = new MyJwtFormat(), 
      Provider = new MyOAuthServerProvider(), 
     }; 

     app.UseOAuthAuthorizationServer(OAuthManager.OAuthServerOptions); 
     app.UseJwtBearerAuthentication(new MyJwtBearerOptions()); 

MyOAuthServerProvider выглядит следующим образом:

public class OAuthServerProvider : OAuthAuthorizationServerProvider 
{ 
    public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
    { 
     var result = base.GrantResourceOwnerCredentials(context); 
     return result; 
    } 

    public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context) 
    { 
     context.Validated(); 
     return Task.FromResult(true); 
    } 
} 

Вопрос 1 является код выше всего, что я требую при вызове службы с маркером-носителем, установленным в заголовке авторизации? Является ли это правильным местом для размещения этого Jwt? Значок должен иметь форму «Bearer ey .....» и т. Д. Я считаю.

Вопрос 2 должен ли вызывающий абонент помещать токен носителя в заголовок «Авторизация» в вызове или в другом месте?

Вопрос 3 почему с вышеуказанным кодом на месте мой OAuthServerProvider никогда не попадает ни в один из методов? Что делает систему проверки подлинности Owin: «Подождите минуту, у нас есть заголовок« Авторизация », поэтому я должен обработать это« что это такое, что мой клиент должен делать по-другому?

Возможно ли, что мой WebApiConfig расстраивает Owin OAuth, возможно? Я установил следующее:

config.SuppressDefaultHostAuthentication(); 

Хотя я не уверен, я понимаю, что это значит ...

Я пытаюсь проверить выше, используя интеграционный тест, который выполняет следующие действия:

  1. создает пользователю
  2. журналов в качестве этого пользователя (правильного прием маркеров Bearer)
  3. делает вызов с проверкой подлинности Податель лексемы установлено на «Aut (аутентификация не установлена ​​в текущем принципе, HttpContext или OwinContext)

Пожалуйста, задавайте мне вопросы для уточнения, это требует меня много времени! Большое спасибо за любую помощь.

ответ

1

Как оказалось, моя конфигурация WebApi нарушала процесс аутентификации. Я забыл включить очень важную строку:

config.Filters.Add(new HostAuthenticationFilter(OAuthBearerOptions.AuthenticationType)); 

После чего аутентификации взлетела действия в мире Owin. Эта проблема возникла в основном из-за того, что я попытался доработать OAuth до уже существующего приложения WebApi, которое не было настроено с использованием шаблонов, которые бы сделали выше для меня.

Так просто напоминание то, что в вашей конфигурации WebAPI включают в себя как строки:

config.SuppressDefaultHostAuthentication(); 
     config.Filters.Add(new HostAuthenticationFilter(OAuthManager.OAuthBearerOptions.AuthenticationType));