Ich benutze ASP.Net Identity, um externe Logins zu implementieren. Nachdem der Nutzer sich bei Google eingeloggt hat, erhalte ich das externe Zugriffstoken von Google. Ich mache dann einen zweiten api-Anruf an ObtainLocalAccessToken(), der das externe Zugangstoken für ein neues lokales handelt.Verifiziere Access Token - Asp.Net Identity
ObtainLocalAccessToken()
Anrufe VerifyExternalAccessToken() die das externe Zugriffstoken mit dem Provider überprüft, indem sie manuell http-Aufrufe durchführt und die user_id analysiert.
Wie kann ich die ASP.NET-Identität nutzen, um die gesamte Methode VerifyExternalAccessToken()
zu entfernen?
Ich glaube, das ist, was [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
ist für nicht wahr? Ich möchte ObtainLocalAccessToken()
Endpoint mit diesem Attribut dekorieren und das external_access_token in der Kopfzeile ({'Authorization' : 'Bearer xxx' }
) senden, und es sollte User.Identity
auffüllen, ohne das externe Zugriffstoken manuell zu überprüfen? Ich glaube, das ist der Zweck, aber ich kann es nicht funktionieren. Ich gültige externe Zugriffstoken von Google senden und es wird mit einem 401.
Ich habe diese Linie in Startup.Auth btw abgelehnt:
app.UseOAuthBearerTokens(new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(),
AuthorizeEndpointPath = new PathString("/AccountApi/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true
});
Alternativ ist es möglich „/ Token“ Endpunkt zu verwenden ein externes Zugriffs-Token für ein lokales zu handeln? Welcher Ansatz ist richtig?
Ich werde hier eine wilde Vermutung machen.Aber jeder Service, den ich von Google verwende, ist über https. Es ist möglich, dass Sie AllowInsecureHttp = true nicht verwenden können? Da Ihr Fehler ein 401 ist, bin ich mir ziemlich sicher, dass ein Aufruf von http nicht erlaubt ist. – GELR
Nun, ich kann ssl noch nicht verwenden, also brauche ich es mit http, wie es von meiner Webanwendung (aber nicht von Handy) funktioniert. Aber stimmt es in meinem Verständnis, dass [HostAuthentication (DefaultAuthenticationTypes.ExternalBearer)] das Prinzip beim Versenden eines externen Zugriffstokens erfüllen soll? Wenn ja, woher weiß er, von welchem Anbieter das Zugriffstoken stammt? – parliament
Und neben 401 = Nicht autorisiert. "Die Autorisierung wurde für diese Anfrage verweigert." – parliament