2014-09-09 2 views
4

Я создал приложение веб-API с аутентификацией токена OAuth. Это работало без проблем, когда маркерный сервер работал в том же приложении, что и служба. Тем не менее, я хотел бы переместить службу авторизации в свое приложение (проект VS) и использовать его в нескольких проектах веб-API, над которыми я работаю. Однако, когда я изолировал логику авторизации в своем собственном проекте, первоначальная служба больше не обрабатывает токены, созданные как действительные. Мой вопрос: возможно ли, чтобы один проект веб-API генерировал токен для проверки другого? Вот мой Owin код запуска и для обслуживания Идента и оригинального сервисСовместное использование токенов OAuth через два проекта веб-API

Auth Service:

public void Configuration(IAppBuilder app) 
    { 
     // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888 
     HttpConfiguration config = new HttpConfiguration(); 

     ConfigureOAuth(app); 

     WebApiConfig.Register(config); 
     app.UseWebApi(config); 
     app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
    } 

    private void ConfigureOAuth(IAppBuilder app) 
    { 
     OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() 
     { 
      AllowInsecureHttp = true, 
      TokenEndpointPath = new PathString("/token"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), 
      Provider = new SimpleAuthorizationServerProvider() 
     }; 

     // Token Generation 
     app.UseOAuthAuthorizationServer(OAuthServerOptions); 
     app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 
    } 

Оригинал служба:

public void Configuration(IAppBuilder app) 
    { 
     ConfigureOAuth(app); 
     // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888 
     HttpConfiguration config = new HttpConfiguration(); 

     config.SuppressDefaultHostAuthentication(); 
     config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); 


     WebApiConfig.Register(config); 

     app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
     app.UseWebApi(config); 
    } 

    public void ConfigureOAuth(IAppBuilder app) 
    { 
     var oauthBearerOptions = new OAuthBearerAuthenticationOptions(); 
     app.UseOAuthBearerAuthentication(oauthBearerOptions); 
    } 

ответ

2

Просто наткнулся на этой Q в то время как исследования это сам. Ответ TL, DR заключается в том, что токены генерируются с использованием свойств machineKey в файле machine.config: если вы хотите размещать на нескольких серверах, вам необходимо переопределить это.

MachineKey может быть переопределен в web.config:

<system.web> 
<machineKey validationKey="VALUE GOES HERE" 
      decryptionKey="VALUE GOES HERE" 
      validation="SHA1" 
      decryption="AES"/> 
</system.web> 

машины Ключи должны быть локально - с помощью онлайн сервиса является не безопасно. KB Article for generating keys

Orginal ref для всего этого здесь http://bitoftech.net/2014/09/24/decouple-owin-authorization-server-resource-server-oauth-2-0-web-api

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