Ich arbeite an einem Projekt, bei dem ein Drittanbieter als Oauth2-basierter Autorisierungsserver fungiert. Ein Asp.net MVC 5-basierter Client, der den Benutzer zum Autorisierungsserver sendet, um sich zu authentifizieren (unter Verwendung von Login / Passwort), und der Authentifizierungsserver wird ein Zugriffstoken an den MVC-Client zurückgeben. Alle weiteren Aufrufe an Ressourcenserver (APIs) erfolgen über das Zugriffstoken.
Um dies zu erreichen, verwende ich Microsoft.Owin.Security.OpenIdConnect und die UseOpenIdConnectAuthentication-Erweiterung. Ich bin in der Lage, das Zugriffstoken vom Authentifizierungsserver erfolgreich umzuleiten und zu erhalten, aber der Client erstellt kein Authentifizierungs-Cookie. Jedes Mal, wenn ich versuche, auf eine gesicherte Seite zuzugreifen, erhalte ich die Rückrufseite mit dem Zugriffstoken.
Was fehlt mir hier? Mein aktueller Code ist unten.
Die gesicherte Controlleraktion:
%Vor%Die Startup-Klasse:
%Vor% TL; DR: benutze ResponseType = "id_token token"
und es sollte funktionieren.
In OpenID Connect wird response_type=token
nicht als zulässiger Wert betrachtet: Ссылка .
Manchmal aus Gründen der Abwärtskompatibilität implementiert, wird response_type=token
von der von MSFT entwickelten OIDC-Middleware nicht unterstützt: Es wird immer eine Ausnahme ausgelöst, wenn vom OpenID Connect-Provider keine id_token
zurückgegeben wird (was auch die gültige code
ausschließt). fließen). Sie können weitere Informationen zu diesem anderen SO-Post finden.
(Anmerkung: In SecurityTokenValidated
ersetzen Sie das von der OIDC-Middleware erstellte Ticket mit n.AuthenticationTicket = new AuthenticationTicket(...)
: Dies ist nicht der empfohlene Ansatz und führt dazu, dass ClaimsIdentity
die wesentlichen Ansprüche nicht enthält Zuweisung und fügen Sie einfach neue Ansprüche wie Sie für die access_token
-Anspruch)
Tags und Links c# oauth-2.0 owin openid-connect wso2