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:
- https://tools.ietf.org/html/draft-ietf-oauth-v2-31
- https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified
- http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werfen Sie einen Blick auf IdentityServer. Es basiert auf Owin.
Es ist auch samples-repository wo finden Sie eine Menge Beispiele für die Verwendung von selfdeployed und\oder 3rd-party-identity-Provider.
Ich denke, dass diese eine Beispiel ist am besten geeignet für Sie.
Sie können post Ihre endgültige Lösung als Antwort? Oder zumindest die sinnvolle Teile?
IdentityServer mich verwirrt, Würde diese ersetzen OWIN und der nativ implementiert Token & authorization server?
InformationsquelleAutor balbelias
Eine Sache zu beachten, mit der OAuth2 Genehmigung server gebaut Katana ist, dass es transparent: Sie müssen Ihre eigenen /auth-Endpunkt (mit MVC oder Nancy zum Beispiel) oder direkt Rendern Sie Ihre Einwilligung in OAuthAuthorizationServerProvider.AuthorizationEndpoint
Können Sie einen Blick auf https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/tree/dev/samples/Mvc für eine komplette Auswahl. Es wird nicht in der OAuth2 Genehmigung server gebaut Katana aber viel mehr ausgearbeitet Gabel targeting OpenID Connect, aber Sie sollten Sie bekommen die Idee.
InformationsquelleAutor Pinpoint