Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Authentification #22

Closed
lehoffma opened this issue May 14, 2017 · 3 comments
Closed

Authentification #22

lehoffma opened this issue May 14, 2017 · 3 comments

Comments

@lehoffma
Copy link
Owner

Zuerst muss sich auf eine Authentifizierungsmethode geeinigt werden. Eine Möglichkeit wäre beispielsweise, JSON Web Tokens zu verwenden.

Daraufhin müssen die HTTP Calls des Frontends an die ausgesuchte Methode angepasst werden.
Für JWTs würde dies folgendermaßen aussehen:

let token = localStorage.getItem('token')
let headers = new Headers({ 'Authorization': 'Bearer ' + token });
let requestOptions = new RequestOptions({ headers: headers });
this.http.post(url, requestOptions)
    .subscribe(...)

Backendseitig muss dann dementsprechend geprüft werden, ob der Token korrekt ist und anhand dessen entscheiden, was zurückgegeben wird (nen 403 code oder das gewünschte Resultat)

@lehoffma
Copy link
Owner Author

Ich würde diese Library für die Backend Authentification verwenden: https://github.com/jwtk/jjwt

Beispiel Anwendung (zumindest der teil wo er den token zusammenbaut könnte hilfreich sein):
https://antoniogoncalves.org/2016/10/03/securing-jax-rs-endpoints-with-jwt/

@lehoffma
Copy link
Owner Author

Es werden jetzt bei jedem API-Aufruf Authentication header mit Bearer <JWT access token> mitgeschickt.
Beim einloggen wird jetzt als Antwort
{id: <number>, auth_token:<JWT access token>, refresh_token:<JWT refresh token>}
erwartet.

Hab mich bei dem Schema an Auth0 orientiert.
Access Tokens sind die Tokens, die zur direkten Authentifizierung der API Aufrufe auf dem Server verwendet werden. Diese Tokens sollten relativ schnell verfallen, also deren expiration time sollte vllt so 15-20 Minuten sein.
Refresh Tokens sind hingegen relativ lange valide (1 woche z.B.). Mit denen können neue Access Tokens generiert werden. Bei uns passiert das über /api/refreshAccessToken (Parameter: {refreshToken: <JWT refresh token>}), beispielsweise wenn ein Request mit nem 401 Unauthorized Error zurück kommt (z.B. weil der Access-Token expired ist). Beim Refreshen wird bisher eine Antwort in Form von {auth_token: <JWT access token>} erwartet.

Um zu verhindern, dass man sich jedes mal, wenn der Refresh token abgelaufen ist, einloggen muss, wird beim refreshen der Seite und danach jede Stunde ein GET-Request mit dem refreshToken als Parameter an /api/refreshRefreshToken (is zugegebenermaßen nicht der beste Name, bin offen für Vorschläge 😅) geschickt. Als Antwort soll dabei, wenn der übergebene Token valide und noch nicht abgelaufen ist, ein refreshter Refresh Token (bedeutet also, das expiry date wurde geupdated) in der Form {refresh_token: <JWT refresh token>} zurück kommen.

@lehoffma
Copy link
Owner Author

lehoffma commented Feb 8, 2018

Ist im Backend-Test branch implementiert. Dadurch sollte man sich auch nicht immer wieder neu einloggen müssen, wenn man aktualisiert.

@lehoffma lehoffma closed this as completed Feb 8, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment