2015-09-16 2 views
2

Я реализую OAuth 2.0 для веб-api. Изначально единственным типом предоставления, который я бы хотел разрешить, является «пароль» для типа гранта для владельца ресурса. В будущем я могу расшириться до других типов субсидий на акции и даже создавать собственные. Чтобы реализовать, я создал в своем классе Startup.cs код ниже. Я не указываю конечную точку авторизации, а только конечную точку маркера.Настройка разрешенных типов грантов с помощью OAuthAuthorizationServer

public partial class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     ConfigureAuth(app); 
    } 

    public void ConfigureAuth(IAppBuilder app) 
    { 

     var myOAuthServerProvider = new MyOAuthServerProvider(); 

     app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions 
     { 

      // mark true if you are not on https channel. This should never be true for Production. 
      AllowInsecureHttp = true, 

      //Enable a 60 minute expiration time. 
      AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(60), 

      // Allows the authorization server to alter the response coming out so it can report a 401. 
      AuthenticationMode = AuthenticationMode.Active, 

      // Provider needs to be the custom class that performs our authentication. 
      Provider = myOAuthServerProvider, 

      // This specifies the endpoint path where you can generate a token. 
      TokenEndpointPath = new PathString("/api/token"), 

     }); 
    } 
} 

Для класса MyOAuthServerProvider, я должен наследоваться от OAuthAuthorizationServerProvider и переопределить конкретные методы только позволяют типы грантов, которые я хочу, чтобы включить, или я должен быть вместо реализации MyOAuthServerProvider из интерфейса IOAuthAuthorizationServerProvider с нуля?

ответ

2

Чтобы разрешить только типы грантов, которых вы хотите, достаточно наследовать от OAuthAuthorizationServerProvider. Затем вам нужно переопределить два метода:

  • ValidateClientAuthentication - для подтверждения того, что происхождение запроса является зарегистрированной client_id
  • GrantResourceOwnerCredentials - для проверки предоставляемых username и password когда grant_type установлен в password

Для получения дополнительной информации приведена документация GrantResourceOwnerCredentials метод:

Вызывается, когда запрос к конечной точке маркеров прибывает с «grant_type» из «пароля». Это происходит, когда пользователь предоставил учетные данные имени и пароля непосредственно в пользовательском интерфейсе клиентского приложения, а клиентское приложение использует их для получения «access_token» и дополнительного «refresh_token». Если веб-приложение поддерживает учетные данные владельца ресурса типа , оно должно проверять контекст. Имя пользователя и контекст. Чтобы выдать токен доступа в контекст.Validated должен быть вызван с новым битом , содержащим претензии к владельцу ресурса, который должен быть связан с токеном доступа. Приложение должно принять соответствующие меры до , чтобы гарантировать, что конечная точка не подвергается насилию со стороны злоумышленников. По умолчанию поведение заключается в том, чтобы отклонить этот тип гранта.

+0

Спасибо! Должен ли я также переопределять GrantAuthorizationCode, GrantClientCredentials и GrantCustomExtension, чтобы либо выбросить исключение, либо вернуть что-то конкретное, чтобы предотвратить использование этих типов грантов? – tarun713

+0

Ничего, просто увидели в документах, что поведение этих функций по умолчанию заключается в том, чтобы отклонить тип гранта. Я приму свой ответ. – tarun713

+0

Есть ли способ установить 'grant_type' программно, а не передавать API? –

Смежные вопросы