2017-05-23 7 views
0

Ich bin auf der Suche nach einer Möglichkeit, die Zugriffstoken Ansprüche in einer .NET API Anwendung mit OWIN zu erneuern. Ich habe darüber gelesen und ich habe gelesen, dass es mit Refresh-Tokens möglich sein könnte.Ist es möglich, das Zugriffstoken in OWIN zu erneuern

Der Kontext dieser Frage ist der folgende. Ich möchte einige Informationen in den Ansprüchen des acces_token speichern, die durch eine Aktion des Benutzers aktualisiert werden könnten. Also zum Beispiel: Der Benutzername wird in einem Claim gespeichert. Der Benutzer entscheidet, seinen Benutzernamen zu aktualisieren. Ist es möglich, den Anspruch zu aktualisieren?

Aber ich kann nirgends ein gutes Beispiel finden, wie man das macht. Und ist das überhaupt möglich, ohne die Sicherheit der Anwendung zu verletzen?

+0

Wenn Sie das Authentifizierungstoken bedeuten, können Sie owin Token und überschreiben das Cookie programmatisch erzeugen. Es gibt Beiträge im Stackoverflow bezüglich der Tokengenerierung. – ali

Antwort

0

Ich glaube nicht, dass dies möglich ist. Ein Oauth-Token kann nicht geändert werden, sobald es erstellt wurde, da das Ändern dazu führen würde, dass die Signatur ungültig wird (was eine gute Sache ist).

Die verbrauchende Anwendung wäre erforderlich, um das Token zu erneuern (Neuauthentifizierung, Verwendung eines Aktualisierungstokens usw.), was möglich wäre, wenn die verbrauchende Anwendung und die API unter Ihrer Kontrolle wären, da dies keine praktische Einschränkung darstellt Ihren API-Konsumenten aufzuerlegen. Eine Alternative besteht darin, die veränderbaren Ansprüche im Zugriffstoken nicht zu speichern, sondern das ClaimsIdentity-Objekt (im IPrincipal) zu füllen, das beim Empfang einer Anforderung vom Zugriffstoken mit zusätzlichen Ansprüchen versorgt wird. Auf diese Weise können Sie die Werte innerhalb der API aktualisieren, aber Ihre Kunden müssen nicht jedes Mal ein neues Zugriffstoken anfordern, wenn sich ein Anspruch ändern muss. Der Nachteil ist, dass Sie die Ansprüche bei jeder Anfrage laden müssen. Sie müssen auch einen Wert im Zugriffstoken haben, der garantiert den Benutzer identifiziert, der niemals geändert werden kann.

Sie können dies tun, um eine OwinMiddleware-Klasse:

public override async Task Invoke(IOwinContext context) 
{ 
    ClaimsIdentity identity = context.Authentication.User?.Identity as ClaimsIdentity; 
    identity.AddClaims(new Claim("Name", "Value)); 
} 
Verwandte Themen