So teilen Sie einen Access Token zwischen einer MVC 5-Webanwendung und einer Web API 2-Anwendung

8

In diesem Fall melde ich mich bei der (MVC 5) -Webanwendung an, die dann als Proxy für die Anmeldung bei der (Web API 2) API (mit Basic über SSL) fungiert und ein Bearer / Access Token zurückgibt. Ich verwende den Thinktecture.IdentityModel.Client.OAuth2Client, um die Anmeldung zu verarbeiten und das Zugriffstoken zu erhalten, was alles gut funktioniert.

Etwas anderes passiert, aber jetzt möchte ich, dass die Webanwendung den Zugriffstoken entschlüsseln kann, um auf die in der API festgelegten Ansprüche zuzugreifen (insbesondere die Benutzer-ID, die nach der Anmeldung an der API zurückgegeben wird).

Ich benutze die vielen Demo-Methoden, UseOAuthAuthorizationServer und UseOAuthBearerAuthentication , mit einem Token-Endpunkt, der ziemlich aus der Box kommt, aber mit einem benutzerdefinierten OAuthAuthorizationServerOptions.Provider , um auf mein eigenes Repository zuzugreifen.

Ich habe den gleichen MachineKey für beide Anwendungen, aber ich weiß nicht, wie ich den Token entschlüsseln soll, obwohl ich verstehe, dass ich wahrscheinlich die Methode SecureDataFormat.Unprotect verwenden müsste.

Der nächste Versuch, den ich in der Webanwendung habe, ist:

%Vor%

Mit dem Startup.DataProtectionProvider wie folgt festgelegt:

%Vor%

Mein Rückfallplan besteht darin, eine API-Methode anzubieten, die die Informationen zurückgibt, an denen ich nach der Anmeldung interessiert bin, aber sie erscheint übertrieben, da sie Teil der Ansprüche im Token ist (so wie ich es verstehe).

Ich habe versucht, meinen Kopf um JWT zu wickeln (ich habe Thinktecture, den Microsoft Quellcode und verschiedene andere Foren angeschaut), aber ich bin mir nicht sicher, ob das helfen würde (obwohl Behauptungen im Klartext uns nützlich sind). Ich muss noch ein Beispiel finden, das die Anmeldung mit der Standardauthentifizierung ermöglicht und eine benutzerdefinierte JWT mit einem Zugriffstoken zurückgibt.

Wie auch immer, ich hoffe, dass Enoguh Informationen und jede Hilfe sehr geschätzt werden ... Prost

    
teatime 19.08.2014, 18:54
quelle

2 Antworten

4

Ihr seid euch sehr nahe gekommen. Shadi war auf dem richtigen Weg. Auch wenn es sich um eine separate mvc-Anwendung handelt, müssen Sie das Token wie gezeigt entschlüsseln und den Anspruch extrahieren. Wenn sich Ihr Web-API-Token in der Variablen accessToken befindet, können Sie in Ihrer mvc-Web-App Folgendes tun. (Beachten Sie, dass mvc sowohl die Bearer-Authentifizierung als auch die Cookie-Authentifizierung verwendet und OAuthBearerOptions eine statische Klasse ist)

%Vor%

Hier ist, wie Ihre startup.auth.cs enthalten sollte (beachten Sie, dass wir ein statisches Mitglied von OAuthBearerAuthenticationOptions haben und app.UseOAuthBearerAuthentication () nur aufrufen, um das Bearer-Token entschlüsseln zu können) %Vor%     

freud 29.12.2014 22:11
quelle
1

Wenn Sie die UseOAuthBearerAuthentication verwenden, können Sie die OAuthBearerOptions für die Klasse Startup.Auth.cs als statisch definieren:

%Vor%

Jetzt können Sie das empfangene Token von überall im Code auf diese Weise aufheben:

%Vor%

Jetzt können Sie das Ticket für Ihren Zugriff auf die Ansprüche für den API-Benutzer verwenden:

%Vor%

Ich hoffe, das würde deine Frage beantworten.

BEARBEITEN

Diese Antwort auf SO würde Ihr Problem bitte lösen schau es dir an.

    
Shadi 26.10.2014 13:34
quelle