ASP.NET Web-API und OpenID Connect: how to get Access-Token vom Autorisierungs-Code
Ich versuche, OpenID Connect läuft... Ein user von meiner Web-API verwaltet, um einen Autorisierungs-Code eines OpenID Connect-Anbieters. Wie soll ich diesen code auf meine ASP.NET Web-API? Wie muss ich konfigurieren OWIN-Middleware, so dass ich bekommen kann eine Access-Token mithilfe der auth-Code?
UPDATE:
Ein SPA verwendet AJAX für die Kommunikation mit meinem web-service - (ASP.NET Web-API). In meinem web-service eine Nutzung OWIN-Middleware. Ich OpenIDConnect als Authentifizierungs-Mechanismus. Wenn der web-service aufgerufen wird, für die es das erste mal erfolgreich Weiterleitung der Benutzer auf die Anmeldeseite des OpenID Connect-Anbieter. Der Benutzer konnte sich anmelden und bekam einen Autorisierungs-Code als Ergebnis. AFAIK dieser code kann nun dazu verwendet werden, (durch meine web-service) , die ein Access-Token. Allerdings weiß ich nicht, wie man diesen code wieder auf meine web-service (erfolgt dies mit einem header?) und was dann auf konfigurieren, um die Access Token. Ich denke, ich könnte anrufen, den token-Endpunkt manuell, aber ich möchte, um die Vorteile der OWIN Komponente statt.
OK, ich habe gerade aktualisiert meine Frage.
InformationsquelleAutor Dunken | 2014-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
BenV die Frage bereits beantwortet, aber es gibt mehr zu berücksichtigen.
Zwei Probleme:
authorizationCode
erhalten schnell abgelaufen. Es hat keinen Sinn, es zu speichern.AuthorizationCodeReceived
event wird nicht gefeuert für jeden der die Seite neu geladen, solange authorizationCode nicht abgelaufen ist und die in der Sitzung gespeichert., Was Sie tun müssen, ist zu nennen
AcquireTokenByAuthorizationCodeAsync
die cache und Griff richtig inTokenCache.DefaultShare
:Nun, bevor jeder Aufruf der Ressource aufrufen
AcquireTokenSilentAsync
man den accessToken (es wird die Verwendung TokenCache oder leise verwenden Sie refreshToken ). Wenn der token abgelaufen ist, wird es erhöhenAdalSilentTokenAcquisitionException
Ausnahme (invoke access code erneuern-Verfahren).Aufrufen
AcquireTokenSilentAsync
ist sehr schnell, wenn token wird zwischengespeichert.AcquireTokenSilentAsync
werfen Ausnahme-duo zuauthorizationCode
abgelaufen ist. Was genau als Nächstes zu tun? Erhalten Sie neue auth-code? In meiner app, wenn es passiert, ich verwendetAcquireToken
und es einen Fehler zurückgibt tokenmüssen Sie rufen Sie AcquireTokenByAuthorizationCodeAsync() wird zuerst, wie in dem Beispiel. Aufruf AcquireTokenSilentAsync() gemeint ist für weitere Anrufe während der request-Verarbeitung, so dass Sie nicht speichern Sie die "authorizationCode". Es ist aber auch möglich, dass Sie nicht über die Berechtigungen auf die Ressource, daher die Ausnahme.
Aber es muss übergeben werden, die die Validierung dann für den Authentifizierungsserver senden zurück
authorization code
rechts (OnOpenIdAuthorizationCodeReceived
Veranstaltung auf OWIN-pipeline)?. Also, wenn der code abgelaufen ist, wie bekomme ich eine andereauthorization code
?Sie müssen nicht speichern
authorization code
. Aufruf AcquireTokenByAuthorizationCodeAsync() bringt es in den internen cache, und weitere Anrufe zu AcquireTokenSilentAsync() verwenden Sie diese cache-intern (so dass Sie nicht haben, um es zu speichern, indem Sie sich selbst).Ich verstehe deine Idee. In der ersten Zeit, ich nenne
AcquireTokenByAuthorizationCodeAsync
imAuthorizationCodeReceived
event und alles funktioniert gut. Nach einem Zeitraum von Zeit, dieauthorization code
ist abgelaufen und es throw exception beim AufrufAcquireTokenSilentAsync
. Also ich Frage mich, wie man eine neueauthorization code
. Oder gibt es einen anderen Weg, um dieses problem zu beheben?InformationsquelleAutor andrew.fox
Sieht aus wie die empfohlene Vorgehensweise ist die Verwendung des
AuthorizationCodeReceived
Veranstaltung zum Austausch der Auth-code für eine Access-Token. Vittorio hat einen blog-Eintrag , beschreibt die gesamte Strömung.Hier ist ein Beispiel aus diese Beispiel-app ist auf GitHub der
Startup.Auth.cs
code, um diese Einrichtung:Hinweis: Die
AuthorizationCodeReceived
Ereignis wird aufgerufen, nur einmal wenn die Autorisierung wirklich stattfindet. Wenn Sie den auth code bereits generiert und gespeichert werden, dieses Ereignis wird nicht aufgerufen. Sie haben zum ausloggen oder die cookies löschen zu zwingen, dieses Ereignis stattfindet.InformationsquelleAutor BenV
Müssen Sie umgehen die Standard-owin-Validierung, um die eigene Berechtigung:
InformationsquelleAutor James