2015-02-26 18 views
6

Sto provando a creare un semplice proof of concept dell'applicazione abilitata OAuth ma sono bloccato sull'implementazione del codice di autorizzazione. Ovunque io legga sembra che vada in un modo o nell'altro, mai realmente usando il flusso del codice di autorizzazione. Sto usando le seguenti risorse per informazioni:Come implementare un flusso Authorization_Code OAuth2 in Web Api utilizzando OWIN Middleware?

Ho installato API Web e Owin con un OAuthAuthorizationServerProvider personalizzato per accettare tipi di password di sovvenzione per l'aggiornamento token e la possibilità di scambiare un token di aggiornamento per un token di accesso. Funziona bene, ma voglio impostare uno scenario in cui reindirizzare un browser al server per autorizzare e reindirizzare al client con un codice di autorizzazione. Desidero quindi che il client invii il codice di autorizzazione all'endpoint del token per ottenere un token di aggiornamento

Nel secondo collegamento in App Web Server, sto cercando di ottenere l'app per la mia API Web per visualizzare un codice di autorizzazione da una richiesta come, http://127.0.0.1/auth?response_type=code&client_id=123&redirect_uri=http://validredirect.com&scope=access, ma continuo a ricevere un 404.

ho configurato Owin come segue:

var databaseContext = new AdnsfContext(); 

WebApp.Start(
    new StartOptions("http://127.0.0.1:7000"), 
    appBuilder => 
    { 
     var httpConfig = new HttpConfiguration(); 
     httpConfig.MapHttpAttributeRoutes(); 
     httpConfig.SuppressDefaultHostAuthentication(); 
     httpConfig.Filters.Add(new HostAuthenticationFilter("Bearer")); 

     appBuilder 
      .UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions 
       { 
        AllowInsecureHttp = true, 
        ApplicationCanDisplayErrors = true, 
        AuthorizeEndpointPath = new PathString("/auth"), 
        TokenEndpointPath = new PathString("/token"), 
        AuthorizationCodeExpireTimeSpan = TimeSpan.FromMinutes(1), 
        AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(1), 
        Provider = new AuthServerProvider(), 
        AuthorizationCodeProvider = new AuthorizationCodeProvider(), 
        RefreshTokenProvider = new RefreshTokenProvider(), 
       }) 
      .UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions 
       { 
        AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active, 
        AuthenticationType = "Bearer", 
       }) 
      .UseCors(CorsOptions.AllowAll) 
      .UseWebApi(httpConfig); 
    }); 

i pezzi che ho aggiunto per consentire l'endpoint di autorizzazione sono le proprietà per le opzioni del server di autenticazione:

AuthorizeEndpointPath = new PathString("/auth"), 
AuthorizationCodeExpireTimeSpan = TimeSpan.FromMinutes(1), 
AuthorizationCodeProvider = new AuthorizationCodeProvider(), 

Le sostituzioni nell'implementazione di AuthorizationCodeProvider non generano eccezioni implementate, ma al momento non ha nemmeno raggiunto alcun punto di interruzione impostato nel codice. Una cosa da notare è che quando uso postman per colpire l'endpoint auth, ottengo un'intestazione del server per HTTPAPI/2.0 che è diversa da quella in cui non c'è semplicemente qualcosa che è emerso in quell'endpoint, il che significa che devo inviare la richiesta in modo non corretto. Qualcuno può vedere un problema con il mio setup? Grazie in anticipo, so che questo è chiaramente il mio fallimento nel comprendere OWIN e OAuth.

risposta

3

Dai uno sguardo allo IdentityServer. È basato su Owin. C'è anche samples repository dove puoi trovare molti esempi usando i provider di identità autoprestiti e \ o di terze parti.

Penso che l'esempio this one sia più appropriato per voi.

+0

IdentityServer era una risorsa eccellente. Insieme all'originale oauth2 spce, IdentityServer e il server di autorizzazione di esempio a cui mi collegavo originariamente, sono riuscito a capirlo. –

+3

@JoshuaBelden Puoi pubblicare la tua soluzione finale come risposta? O almeno le parti significative di esso? –

3

Una cosa da notare con il server di autorizzazione OAuth2 costruito nel Katana è che è trasparente: è necessario fornire il proprio/auth endpoint (usando MVC o Nancy per esempio) o rendere direttamente il vostro modulo di consenso in OAuthAuthorizationServerProvider.AuthorizationEndpoint

È possibile dare un'occhiata a https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/tree/dev/samples/Mvc per un campione completo. Non utilizza il server di autorizzazione OAuth2 costruito in Katana, ma un fork molto più elaborato che punta a OpenID Connect ma dovresti ottenere l'idea.

Problemi correlati