13

Wir verwenden die Username-Password-Berechtigung, um ein Zugriffstoken von unserem Authentifizierungsserver zu erhalten. Wir möchten das Zugriffstoken aktualisieren, bevor es abläuft, indem Sie das bereitgestellte Aktualisierungstoken verwenden, bis sich der Benutzer abmeldet oder die Clientanwendung schließt.Fordern Sie ein neues Zugriffstoken mit dem Aktualisierungstoken in der Kennung username-password in Spring Security an. OAuth2

aber ich kann einfach keine Beispiele finden, wie diese Aktualisierungs-Token Anfrage auszustellen ..

das Token erhalten wir etwas nennen wie:

curl -v --data "grant_type=password&username=user&password=pass&client_id=my_client" http://localhost:8080/oauth/token 

So aufzufrischen ich den Anruf erwarten würde, zu sehen wie folgt aus:

curl -v --data "grant_type=refresh_token&access_token=THE_ACCESS_TOKEN&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token 

oder vielleicht

curl -v -H "Authorization: Bearer THE_ACCESS_TOKEN" --data "grant_type=refresh_token&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token 

Aber es wird mir einfach eine 401 ..

Oh ja, vielleicht muss ich die clientId hinzufügen? Ich kann das Client-Geheimnis nicht verwenden, weil es keines gibt (siehe oben, um das Token zu erhalten). Authentifizierung erfolgt mit Benutzername und Passwort nach allem ..

Ich denke, wir haben die Serverkonfiguration richtig, also werde ich es hier nicht veröffentlichen. Wenn eine meiner Beispielanforderungen funktionieren sollte und Sie die wichtigen Konfigurationsteile sehen müssen, füge ich sie hinzu.

Danke!

Antwort

24

Also wie gesagt, wir verwenden keine Client-Geheimnis, weil wir nicht so rumhängen haben in der Javascript-Client-App. Und es wird sowieso nicht benötigt, wenn man den Benutzernamen-Passwort-Grant verwendet. (Siehe die Art, wie wir das Zugriffstoken anfordern). die Tat war ich zu der Lösung der Nähe und es endlich herausgefunden:

curl -v --data "grant_type=refresh_token&client_id=THE_CLIENT_ID&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token 

so dass keine Notwendigkeit für die Zugriffstoken oder das Client-Geheimnis.

Insgesamt fühlt es sich sicher genug an.

  • Wir speichern kein Geheimnis auf der Seite der Client-App.
  • Die Benutzer benötigen immer ein Passwort zum Einloggen und können nur ihre Ressourcen sehen.
  • Wir begrenzen die Gültigkeit des Refresh-Tokens auf eine realistische Zeit wie einen Arbeitstag oder etwas, so dass das Fenster für einen Angreifer eingeschränkt bleibt, während der Benutzer weiterhin bequem mit dem Ressourcenserver verbunden bleiben kann Session.
+0

nicht sicher, warum benötigen Sie Token hier überhaupt zu aktualisieren. Zugriffstoken mit begrenzten Gültigkeit verhält sich genau das gleiche mit einem einfacheren Workflow. Fehle ich etwas? – long

+0

@long was, wenn Ihr Zugriffstoken und Ihre Benutzer noch angemeldet war abgelaufen ist. Sie erhalten ein neues Zugriffstoken in diesem Fall bekommen müssen, und dafür verwenden wir Aktualisierungs-Token –

6

Für das Kennwort grant_type sind eine clientId und clientSecret erforderlich. Sie waren mit Ihrem dritten Versuch nah dran, aber Sie übergeben die Base64-codierte clientId und clientSecret anstelle des Access Tokens im Authorization-Header. Dies ist die richtige Aktualisierungs-Token Anfrage:

curl -H "Authorization: Bearer [base64encode(clientId:clientSecret)]" "https://yourdomain.com/oauth/token?grant_type=refresh_token&refresh_token=[yourRefreshToken]" 

Für eine gute Referenz, check this out: http://techblog.hybris.com/2012/06/11/oauth2-resource-owner-password-flow/

+0

Hallo @Kubgfuters, ich habe wenig Problem mit meiner Konfiguration. Erstens, wenn ich die Anfrage zum Zugriff auf das Token sende, wird die Antwort erfolgreich mit dem Token generiert.Aber wenn ich versuche, auf die Ressource zuzugreifen, wenn i Basis 64 codierte Benutzername/Passwort senden statt Token, wird die Ressource erfolgreich statt sedning Token abgerufen. Dies ist die URL meiner confuiguration https://github.com/harmeetsingh0013/dummy_project/blob/master/dummy-project-configuration/src/main/java/com/harmeetsingh13/config/Oauth2SpringSecurityConfig.java –

+0

Ich nehme an, du bist sprechen über eine Begrenzung des Frühlings Sicherheit und nicht OAuth2 im allgemeinen. Auch immer zur Klärung, es ist nicht für OAuth2 erforderlich: https://tools.ietf.org/html/rfc6749#section-4.3.2 –

Verwandte Themen