0

client_credentials許可タイプがリフレッシュトークンシナリオをサポートしていますか?スプリングセキュリティclient_credentials grant_type - リフレッシュトークンのサポート

client_credentialsグラントタイプを使用すると、access_tokenの有効期限はどのように処理する必要がありますか?

私は、クライアントアプリケーションからのすべての要求のゲートウェイとして機能するプロキシサービス(Zuul with EnableOAuth2Sso)の後ろに認証サービスとセキュリティ保護されたサービスを持っています。

  1. プロキシサービス(zuul)
  2. Proxyサービスがclient_idclient_secretgrant_typeを掲載することにより、承認サービスAPIを呼び出すクライアントアプリケーションからの要求(残りAPI)を受け付ける(:ここ

    は、私が持っている流れでありますclient_credentials)を取得し、access_token,refresh_token、応答から有効期限が切れます
  3. プロキシサービスは、zuulルートマッピングに従って保護されたサービスに元の要求をルーティングします。

この流れが正常に動作しますが、ClientCredentialsAccessTokenProviderのコードを見て、私は「supportsRefresh」戻りfalseと「refreshToken」メソッドはnullを返すことに気づきました。これは、access_tokenがクライアントアプリケーションからプロキシサービス(zuul)への後続のリクエストの期限が切れると失敗することを意味しますか?

答えて

2

client_credentials OAuth許可サーバーはマシンツーマシン認証を必要とするため、トークンを更新する必要はありません。

結果として、Spring Security OAuthのClientCredentialsAccessTokenProviderでは、supportsRefreshはfalseを返し、refreshTokenメソッドはnullを返します。

実際、認証サーバーとリソースサーバーはすべて同じ場所にあります(これは、トークンの生成がかなり安いことを意味します)。私はアクセストークンの短い寿命(10分のような)を設定して、それらを自己使い捨てとして扱うことができ、保護されたリソースに触れたいときはいつでもアクセストークンを得ることをお勧めします。

+0

応答に感謝します。いくつかの説明。 1)リソースサーバーと認証サーバーが同じ場所にない可能性があります。2)シナリオでは、リソースサーバーはアクセストークンを取得していません。私たちには、認証サーバーからaccess_tokenを取得し、httpヘッダー内のものをリソースサーバーに中継するゲートウェイサービス(zuul)があります。私の質問は、私たちのプロキシサーバーは常にすべての要求に対して新しいaccess_tokenを取得するか、有効期限が切れたときにのみリフレッシュできるかどうかです。私は後でそれを望んでいたが、ClientCredentialsAccessTokenProviderクラスを見ると、サポートされていないことがわかります。 – rgv

+0

私が考えているもう一つの選択肢は、ゲートウェイサービスでロジック(フィルタ)を実装して、コンテキスト内のaccess_tokenが期限切れになっているかどうかを確認し、クライアントの資格情報(client_idとclient_secret)を使って新しいaccess_tokenを取得することです。 – rgv

+0

@rgvの場合、これらのトークン関連の操作を行うには 'AuthenticationFilter'する必要があります。 – chenrui

関連する問題