bkd-mba-fbi / evento-portal

Portal for binding evento rest-api js webapps. With role based navigation.
MIT License
6 stars 1 forks source link

Async token refresh (Token Rotation) - 7PT #157

Open schefbi opened 8 months ago

schefbi commented 8 months ago

Das Token soll neu asynchron refreshed werden. Somit haben wir kein redirect mehr. Ausserdem wird mit dieser Erweiterung auch ein Sicherheit eingebaut.

Dokumentation SLH: https://clx-evento.bitbucket.io/EVT2023.R2_eventodoc/Api/Autorisierung/RefreshToken/#refresh-uber-token-endpunkt-asynchron

POST - /Authorization/{InstanceId}/Token
Body kann entweder als Content-Type: application/json oder | application/x-www-form-urlencoded übergeben werden. 
{
    refresh_token: {RefreshToken},
    grant_type: "refresh_token",
    client_id: {ClientId},
    culture_info: {Culture}
}

ToDos:

schefbi commented 8 months ago

@hupf Ich habe es einmal Beschrieben was alles gemacht werden muss. Wir werden am Freitag 12.01.2024 den Release auf Test integrieren. Ab Montag sollte dann die Version mit der asynch token refresh (Token Rotation) vorhanden sein. Ihr könnt euch das einmal anschauen dann meldet Ihr euch einfach.

hupf commented 8 months ago

@schefbi Danke für die Spezifikation. Sind folgende Aussagen also korrekt (damit wir uns richtig verstehen):

Bezüglich der Umsetzung heisst das für uns konkret:

hupf commented 8 months ago

Mit der aktuellen Implementation der Token Rotation werden die Access-Tokens der anderen Scopes invalid, sobald man den Scope wechselt, dies führt dazu, dass beim Öffnen eines neuen Tabs oder Fensters die bisherigen Tabs/Fenster nicht mehr authentifiziert sind.

Deshalb ist diese Issue im Moment "On Hold", bis es eine Lösung gibt (z.B. Access-Token gar nur pro Scope oder gar nicht rotieren bzw. Scope Handling komplett überarbeiten).

hupf commented 8 months ago

Mögliche Zwischenlösung mit separaten "Token-Strängen" pro Scope:

Vorteil dieser Lösung:

Nachteil dieser Lösung:

hupf commented 6 months ago

@schefbi Können wir noch folgende Punkte verifizieren:

schefbi commented 6 months ago

@hupf Dieser Change ist noch nicht umgesetzt bei SLH. Wir haben auch noch kein Datum. Falls es nicht reicht wenn ihr das Projekt startet werden wir ihn verschieben. Alle deine Punkt werden in diesem Change umgesetzt.

hupf commented 5 months ago

Update:

Aktuell ist ein neuer Endpunkt für einen asynchronen Login geplant, mit dem über XHR ein Token mit einem anderen Scope gefetched werden kann. Damit wird dann folgendes Vorgehen möglich werden:

  1. Gültiges Access Token für den gewünschten Scope vorhanden → verwenden :+1:
  2. Access Token für den gewünschten Scope abgelaufen, Refresh Token noch gültig → neues Refresh/Access Token Paar über den async Token Endpunkt (POST /Authorization/{instance_id}/Token) fetchen
  3. Kein Refresh Token für gewünschten Scope vorhanden oder abgelaufen → Refresh/Access Token Paar über den async Login (POST /Authorization/{instance_id}/Auth) fetchen
  4. 401 vom async Login oder kein Refresh Token vorhanden → Redirect zum Login

Dabei gibt es zwei Timers: