Web-API 2, OWIN-Authentifizierung, SignOut meldet sich nicht ab

Ich mache einige der Forschung, für Arbeit mit Blick auf die mithilfe von Bearer-Token als Authentifizierungsmechanismus (z.B. AngularJS UI, authentifiziert über OWIN in einer Web-API [2] - Projekt).

Ich habe das login funktioniert Prima, Rolle, Informationen und alles, das ist in Ordnung, aber ich Schaffe es nicht, das token auf "Abmelden".

Mein Start-Konfiguration ist diese:

OAuthOptions = new OAuthAuthorizationServerOptions() {
    TokenEndpointPath = new PathString("/Token"),
    Provider = new ApplicationOAuthProvider(PublicClientId),
    AccessTokenExpireTimeSpan = SESSION_TIMEOUT,
    AllowInsecureHttp = true
};

Sowie mein logout-Aktion ist einfach:

public HttpResponseMessage Logout() {
    var authentication = HttpContext.Current.GetOwinContext().Authentication;
    authentication.SignOut(DefaultAuthenticationTypes.ExternalBearer);

    return new HttpResponseMessage(HttpStatusCode.OK);
}

Habe ich Links die Authentifizierung Zeug für die Kürze, aber zu bestätigen, ich bin mit ExternalBearer beim einrichten des token.

In meinem UI, ich bin die Speicherung der token im lokalen Speicher (es werden keine cookies beteiligten hier, das ist eine bewusste design-Entscheidung). Also ich habe ein logout - button auf die eigene UI, die Logout Aktion ist der hit und der code läuft wunderbar.

Jedoch wenn ich anschließend trifft der eine Aktion auf die API, Bedarf der Genehmigung, der Antrag geht noch durch (D. H. der Benutzer ist immer noch authentifiziert, auch wenn Sie sollte wurden abgemeldet.

Entweder fehlt mir etwas wirklich offensichtlich (wäre nicht das erste mal 😉 oder es gibt etwas grundlegenderes hier Los ist, schließlich bin ich Ping @leastprivilege wie ich weiß, das ist Ihr Gebiet.

Jede Hilfe oder Einsicht wäre dankbar angenommen.


Einzige was ich mir vorstellen kann ist, dass das token Staatenlosen auf dem server/API-Seite und kann daher nicht abgelaufen oder abgemeldet.

Wenn das der Fall ist ich denke, ich könnte entweder:

a) Fügen Sie einen refresh-token, das erstellt ein neues token, das läuft in die Vergangenheit - würden diese auch funktionieren? - eigentlich Abbrechen hätte, wäre es die Ausgabe eines neuen token ... die alte müsste man noch gültig

b) Speichern der bearer-token in der Datenbank aus und prüfen Sie jedes mal, entfernen Sie das token auf logout (natürlich gesalzen, gehasht, etc). Dies ist aber nur bringt uns zurück zu einer stateful-server.

c) ich kann (und will) das entfernen werden die token aus dem lokalen Speicher, wenn jemand explizit abmeldet, jedoch ist der token noch technisch gültig, wenn einen Fiesling das token herausfindet. Natürlich sind alle die oben über SSL sowieso, die sollten hemmen die bösen Jungs/Mädchen.

d) Vielleicht ist das, warum viele Menschen sind die Speicherung von den Inhaber-token in einem cookie (als storage-Verfahren), so dass, sobald Sie logout als zuletzt, wird das cookie entfernt, der nächsten Aktualisierung.

Sorry das oben ist ein bisschen wie ein Gehirn-dump, die gerade wollen, um pre-empt Fragen

Kommentar zu dem Problem - Öffnen
Fügen Sie Ihren code, wenn Sie das Problem gelöst, indem Sie den folgenden Vorschlag. Ich habe wirklich wenig verwirrt hinsichtlich dessen, wo hast du das add unique-id und aktiviert IncludeJwtId Kommentarautor: Jeeva Jsb

InformationsquelleAutor der Frage toepoke.co.uk | 2014-07-03

Schreibe einen Kommentar