ユーザー名とパスワードの付与を使用して、認証サーバーからアクセストークンを取得しています。ユーザーがログアウトするかクライアントアプリを閉じるまで、提供された更新トークンを使用して、有効期限が切れる前にアクセストークンを更新します。
ただし、このリフレッシュトークンリクエストの発行方法の例は見つかりません。
トークンを取得するには、次のように呼び出します。
curl -v --data "grant_type=password&username=user&password=pass&client_id=my_client" http://localhost:8080/oauth/token
更新するには、呼び出しが次のようになることを期待します。
curl -v --data "grant_type=refresh_token&access_token=THE_ACCESS_TOKEN&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token
または多分
curl -v -H "Authorization: Bearer THE_ACCESS_TOKEN" --data "grant_type=refresh_token&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token
しかし、それは私に401を与えるだけです。
そうそう、多分私はclientIdを追加する必要がありますか?クライアントシークレットがないため、クライアントシークレットを使用できません(上記のトークン取得リクエストを参照)。結局、ユーザー名とパスワードを使用して認証が行われます。
サーバー構成は正しいと思うので、ここには投稿しません。例のリクエストの1つが機能し、重要な構成部分を確認する必要がある場合は、それらを追加します。
ありがとう!
そのため、私が言ったように、クライアントシークレットを使用しません。これは、Javascriptクライアントアプリでぶらぶらすることができないからです。とにかく、ユーザー名とパスワードの付与を使用する場合は必要ありません。 (アクセストークンのリクエスト方法を参照してください)。実際、私は解決策に近づき、最終的にそれを理解しました:
curl -v --data "grant_type=refresh_token&client_id=THE_CLIENT_ID&refresh_token=THE_REFRESH_TOKEN" http://localhost:8080/oauth/token
そのため、アクセストークンやクライアントシークレットは不要です。
全体的に十分に安全だと感じています。
パスワードgrant_typeには、clientIdとclientSecretが必要です。 3回目の試行で終了しましたが、Authorizationヘッダーでアクセストークンの代わりにBase64エンコードされたclientIdとclientSecretを渡します。これは適切な更新トークンリクエストです。
curl -H "Authorization: Bearer [base64encode(clientId:clientSecret)]" "https://yourdomain.com/oauth/token?grant_type=refresh_token&refresh_token=[yourRefreshToken]"
良いリファレンスについては、これをチェックしてください: http://techblog.hybris.com/2012/06/11/oauth2-resource-owner-password-flow/