13

Stiamo utilizzando la concessione nome utente-password per ottenere un token di accesso dal nostro server di autenticazione. Vogliamo aggiornare il token di accesso prima che scada utilizzando il token di aggiornamento fornito fino a quando l'utente non chiude o chiude l'app client.Richiedi nuovo token di accesso utilizzando il token di aggiornamento in concessione nome-password in Spring Security OAuth2

Tuttavia non riesco proprio a trovare nessuna esempi di come a rilasciare questo refresh richiesta di token ..

Per ottenere il token che chiamiamo qualcosa di simile:

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

Quindi, per rinfrescare mi aspetto la chiamata a guardare come questo:

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

o forse

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

Ma mi darà solo un 401 ..

Oh sì, forse ho bisogno di aggiungere il clientId? Non riesco a utilizzare il segreto del client, perché non ce n'è uno (vedere sopra la richiesta per ottenere il token). L'autenticazione viene eseguita utilizzando nome utente e password.

Penso che la configurazione del server sia corretta, quindi non la posterò qui. Se una delle mie richieste di esempio dovesse funzionare e hai bisogno di vedere le parti importanti della configurazione, le aggiungerò.

Grazie!

risposta

24

Così come ho detto, non usare un segreto cliente, perché non possiamo avere quel giro nell'app client Javascript. E non è necessario in ogni caso, quando si utilizza la concessione nome utente-password. (Vedi il modo in cui richiediamo il token di accesso). In effetti mi è stato vicino alla soluzione e alla fine capito:

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

quindi non è necessario per il token di accesso o il segreto cliente.

Oltre tutto, sembra abbastanza sicuro.

  • Non memorizziamo alcun segreto sul lato dell'app client.
  • Gli utenti hanno sempre bisogno di una password per accedere e possono vedere solo le loro risorse.
  • Limitiamo la validità del token di aggiornamento a un tempo realistico come un giorno lavorativo o qualcosa in modo che anche se è compromessa la finestra per un utente malintenzionato è limitata pur consentendo all'utente di rimanere connesso al server delle risorse per un lungo periodo sessione.
+0

Non sai perché hai bisogno di aggiornare il token qui. I token di accesso con validità limitata si comportano esattamente allo stesso modo con un flusso di lavoro più semplice. Mi sto perdendo qualcosa? – long

+0

@lungo cosa succederebbe se il tuo token di accesso fosse scaduto e il tuo utente fosse ancora loggato. In quel caso dovrai ottenere un nuovo token di accesso e per questo utilizzeremo il token di aggiornamento –

6

Per la password grant_type, sono richiesti un clientId e un clientSecret. Sei stato vicino al terzo tentativo, ma hai passato l'ID client codificato Base64 e il clientSecret invece del token di accesso nell'intestazione Autorizzazione. Questo è il corretto aggiornamento richiesta di token:

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

Per un buon riferimento, check this out: http://techblog.hybris.com/2012/06/11/oauth2-resource-owner-password-flow/

+0

Ciao @Kubgfuters, ho un piccolo problema con la mia configurazione. Innanzitutto quando invio la richiesta di accesso al token, la risposta genererà con successo il token.Ma quando provo ad accedere alla risorsa, se invio il nome utente/password codificati in base 64 al posto del token, la risorsa verrà acceduta correttamente al posto del token sedativo. questo è l'indirizzo della mia configurazione https://github.com/harmeetsingh0013/dummy_project/blob/master/dummy-project-configuration/src/main/java/com/harmeetsingh13/config/Oauth2SpringSecurityConfig.java –

+0

Suppongo che tu sia parlando di una limitazione della sicurezza di Spring e non di OAuth2 in generale. Ad ogni modo per chiarimenti, non è richiesto per OAuth2: https://tools.ietf.org/html/rfc6749#section-4.3.2 –

Problemi correlati