Wie implementiere ich eine OAuth2 Authorization_Code Fließen in Web-Api mit OWIN-Middleware?

Ich bin versucht, zu erstellen eine einfache proof-of-concept OAuth-Anwendung aktiviert, bin aber fest auf dem Autorisierungs-code-Implementierung. Überall lese ich, wie es scheint, geht in die eine oder andere Weise, eigentlich nie mit dem authorization code flow. Ich habe mit den folgenden Ressourcen Informationen:

Ich habe setup web api und owin mit einem benutzerdefinierten OAuthAuthorizationServerProvider zu akzeptieren Kennwort grant-Typen für refresh-Token und die Fähigkeit zum Austausch ein refresh-token für einen access-token. Dies funktioniert gut, aber ich möchte die Einrichtung zu einem Szenario, wo ich umleiten browser an den server zu autorisieren, und leiten Sie zurück an den client mit einem authorisierungscode. Dann möchte ich den client gesendet, den Authorisierungs-code an den token-Endpunkt um einen refresh-token

Im zweiten link unter Web-Server-Apps, ich bin versucht, meine web-api-app-Oberfläche ein Autorisierungs-code, der von einer Anfrage wie, http://127.0.0.1/auth?response_type=code&client_id=123&redirect_uri=http://validredirect.com&scope=access, aber ich bekomme immer ein 404.

Habe ich konfiguriert owin wie folgt:

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);
    });

Die Stücke, die ich Hinzugefügt haben, aktivieren Sie den Autorisierungs-Endpunkt werden die Eigenschaften für die auth server-Optionen:

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

Den overrides in meiner Umsetzung der AuthorizationCodeProvider werfen nicht implementiert Ausnahmen, aber es ist derzeit nicht einmal schlagen alle Haltepunkte in den code. Eine Sache zu beachten ist, dass wenn ich Briefträger trifft den auth-Endpunkt, bekomme ich einen server-header für HTTPAPI/2.0, die ist anders, als wenn es einfach nicht etwas ist aufgetaucht, an diesem Endpunkt, das heißt, ich muss das senden der Anfrage falsch. Kann jemand sehen, ein problem mit meinem setup? Vielen Dank im Voraus, ich weiß, dies ist eindeutig mein Versagen im Verständnis OWIN und OAuth.

InformationsquelleAutor Joshua Belden | 2015-02-26

Schreibe einen Kommentar