Authorization_code gewähren flow auf Owin.Sicherheit.OAuth: gibt invalid_grant
Ich versuche, meine setup-Authentifizierung verwenden der authorization_code
Zuschuss fließen. Ich hatte es zuvor mit grant_type=password
, so dass ich Art von wissen, wie das Zeug funktionieren soll. Aber wenn grant_type=authorization_code
, konnte ich nicht zurückkehren, alles andere als invalid_grant
Hier ist mein setup:
app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/auth/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(5),
Provider = new SampleAuthProvider()
});
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
AuthenticationType = "Bearer"
});
SampleAuthProvider ist die folgende Klasse: https://gist.github.com/anonymous/8a0079b705423b406c00
Im Grunde, es ist nur die Protokollierung, die jeden Schritt und es überprüft. Ich habe versucht, die Anfrage:
POST http://localhost:12345/auth/token
grant_type=authorization_code&code=xxxxxx&client_id=xxxxx&redirect_uri=https://xxxx.com/
Content-Type: application/x-www-form-urlencoded
Es geht durch:
OnMatchEndpoint
OnValidateClientAuthentication
Und das ist alles. Ich erwartete, es zu nennen OnValidateTokenRequest
und OnGrantAuthorizationCode
nächsten, aber es hat einfach nicht. Ich habe keine Ahnung, warum.
Den xxxx
's in der Anforderung sind nicht Platzhalter, ich habe versucht es so. Vielleicht ist die middleware macht ein paar Prüfungen, auf seine eigene, und lehnt den Antrag wegen? Ich versuchte Variante (N) der redirect_uri
mit http
, ohne Protokoll, ohne trailing slash...
Funktioniert es auch richtig mit einer benutzerdefinierten grant_type
. Es so, wenn ich zu verzweifelt, ich denke, dass ich verwenden können, um zu simulieren authorization_code
, aber ich würde es lieber nicht zu tun.
TL;DR
Meine OAuthAuthorizationServerProvider
zurück {"error":"invalid_grant"}
nach OnValidateClientAuthentication
bei der Verwendung grant_type=authorization_code
.
- Warum ist es hier anzuhalten?
- Wie kann ich das ganze verdammte Ding funktioniert?
Vielen Dank für Ihre Hilfe!
Bearbeiten
Wie bereits von RajeshKannan, ich habe einen Fehler in meiner Konfiguration. Ich habe nicht eine AuthorizationCodeProvider
Instanz. Jedoch, die nicht vollständig das problem lösen, da in meinem Fall der code wird nicht ausgegeben, indem die AuthorizationCodeProvider
, und ich kann nicht einfach Deserialisieren. Ich behandelt mit dem workaround hab ich arbeiten.
InformationsquelleAutor dgn | 2014-07-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, was ich habe zu arbeiten. Ich bin mir nicht so ganz wohl mit dieser Lösung, aber es funktioniert und sollte anderen helfen, zu beheben Ihre Probleme.
So, das Problem ist, dass ich nicht die
AuthorizationCodeProvider
Eigenschaft. Wenn bei einer Anfragegrant_type=authorization_code
empfangen wird, muss der code validiert werden, dass code-Anbieter. Das framework geht davon aus, dass der code ausgestellt wurde, die code-Anbieter, aber das ist nicht mein Fall. Ich bekomme es von einem anderen server haben, senden Sie den code zurück, um es für die Validierung.In der standard-Fall, wo Sie auch sind, die eine Erteilung der code, der link von RajeshKannan beschreibt alles, was Sie zu tun haben.
Hier ist, wo Sie haben, um die Eigenschaft:
Sowie die Deklaration der
MyAuthorizationCodeProvider
Klasse:Sorry, habe ich aufgehört zu arbeiten an diesem Projekt, also habe ich keine weiteren updates zu diesem Thema. Diese Lösung funktionierte gut, obwohl. Die API ist einfach gestaltet mit anderen Anwendungsfälle in den Sinn. Vielleicht in zukünftigen updates, die machbar ist, ohne fest programmierte Tasten, casts und co.
InformationsquelleAutor dgn
Stellen Sie sicher, dass Sie so konfiguriert haben, dass Sie Ihre Autorisierungs-server-Optionen.
Ich denke, Sie sollten Ihre autorisieren end-Punkt details:
In den folgenden link, den authorization code grant werden im detail erläutert und es listet die Methode, die beteiligt waren in der authorization-code-grant-life-cycle.
Owin Oauth authorization server
InformationsquelleAutor RajeshKannan
Ich hatte den gleichen Fehler. Dinge, die mir fehlte:
OAuthAuthorizationServerOptions.AuthorizationCodeProvider
nach der Dokumentation.client_id
als GET-parameter, wenn eine Anfrage an das token-Endpunkt als Sie haben, wenn Sie erhalten dieauthorization_code
.OAuthAuthorizationServerProvider.ValidateClientAuthentication
und in dieser Methode rufen Siecontext.TryGetFormCredentials
. Diese setzt die Eigenschaftcontext.ClientId
den Wert aus derclient_id
GET-parameter. Diese Eigenschaft festgelegt werden muss, sonst bekommst du dieinvalid_grant
Fehler. Auch, rufencontext.Validated()
.Tun, nachdem alle der oben genannten, konnte ich endlich den Austausch der
authorization_code
zu einemaccess_token
an den token-Endpunkt.InformationsquelleAutor Gebb
Dank Szenario, Mein code fehlte die folgenden beiden erforderlichen Werte. Hier gepostet falls andere es nützlich finden:
InformationsquelleAutor mkaj