Nous utilisons l'attribution de nom d'utilisateur et de mot de passe pour obtenir un jeton d'accès de notre serveur d'authentification. Nous voulons actualiser le jeton d'accès avant son expiration à l'aide du jeton d'actualisation fourni jusqu'à ce que l'utilisateur se déconnecte ou ferme l'application cliente.
Cependant, je ne trouve aucun exemple de la façon d'émettre cette demande de jeton d'actualisation.
Pour obtenir le jeton, nous appelons quelque chose comme:
curl -v --data "grant_type=password&username=user&password=pass&client_id=my_client" http://localhost:8080/oauth/token
Donc, pour me rafraîchir, je m'attends à ce que l'appel ressemble à ceci:
curl -v --data "grant_type=refresh_token&access_token=THE_ACCESS_TOKEN&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token
ou peut-être
curl -v -H "Authorization: Bearer THE_ACCESS_TOKEN" --data "grant_type=refresh_token&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token
Mais ça me donnera juste un 401 ..
Oh oui, je dois peut-être ajouter le clientId? Je ne peux pas utiliser le secret client, car il n'y en a pas (voir la demande ci-dessus pour obtenir le token). L'authentification se fait en utilisant le nom d'utilisateur et le mot de passe après tout.
Je pense que nous avons la bonne configuration du serveur, donc je ne la posterai pas ici. Si l'une de mes demandes d'exemple doit fonctionner et que vous avez besoin de voir les parties importantes de la configuration, je les ajouterai.
Merci!
Donc, comme je l'ai dit, nous n'utilisons pas de secret client, car nous ne pouvons pas le laisser traîner dans l'application client Javascript. Et ce n'est pas nécessaire de toute façon, lors de l'utilisation de la subvention nom d'utilisateur-mot de passe. (Voir la façon dont nous demandons le jeton d'accès). En effet, j'étais proche de la solution et j'ai finalement compris:
curl -v --data "grant_type=refresh_token&client_id=THE_CLIENT_ID&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token
donc pas besoin de jeton d'accès ou de secret client.
Dans l'ensemble, il se sent assez en sécurité.
Pour le mot de passe grant_type, un clientId et clientSecret sont requis. Vous étiez proche de votre troisième tentative, mais vous transmettez le clientId et le clientSecret encodés en Base64 au lieu du jeton d'accès dans l'en-tête d'autorisation. Il s'agit de la demande de jeton d'actualisation appropriée:
curl -H "Authorization: Bearer [base64encode(clientId:clientSecret)]" "https://yourdomain.com/oauth/token?grant_type=refresh_token&refresh_token=[yourRefreshToken]"
Pour une bonne référence, consultez ceci: http://techblog.hybris.com/2012/06/11/oauth2-resource-owner-password-flow/