2

カスタム Web アプリケーションを Azure B2C OAuth および Spring OAuth2.0 フレームワークと連携させようとしています。

認証レグは正常に戻り、JWT トークンを受け取ります。その後、トークンのリクエストが発生すると、次のエラーが発生します。

java.lang.IllegalStateException: Access token provider returned a null access token, which is illegal according to the contract.
at org.springframework.security.oauth2.client.OAuth2RestTemplate.acquireAccessToken(OAuth2RestTemplate.java:223) ~[spring-security-oauth2-2.0.8.RELEASE.jar:na]
at org.springframework.security.oauth2.client.OAuth2RestTemplate.getAccessToken(OAuth2RestTemplate.java:173) ~[spring-security-oauth2-2.0.8.RELEASE.jar:na]
...

スプリングコードのデバッグから、クラスaccess_tokenで見られるようにトークンが呼び出されることが期待されていることがわかります。OAuth2AccessTokenB2C チュートリアルを見ると、トークンは と呼ばれtoken_idます。さらに、Spring アプリケーション用の applications.yml 構成には、tokenName というフィールドがあります。上記のようにハードコードされた静的変数の代わりに、トークン名フィールドを取得するためにこれを使用する必要があります。

私は何か不足していますか、私の問題に対する解決策はありますか? spring OAuth フレームワークで使用されるトークン名フィールドをオーバーライドできますか?

4

1 に答える 1

0

私は先に進み、これを答えとして投稿します。

Spring チュートリアルから始めて、それにいくつかの変更を加えました。実際の例については、パブリック github リポジトリ ( https://github.com/Pytry/azure-b2c-oauth2.git ) を参照してください。

受け取ったトークンを適切に解析するには、次のものが必要です。

  • JWT を解析し、S​​pring セキュリティの必要に応じて変数をプルおよび設定する AccessToken のカスタム実装。DefaultOAuth2AccessToken を拡張し、この解析をコンストラクターによって呼び出されるプライベート メソッドに追加しました。

  • 公開鍵を使用して RSA 署名を検証する場合は、ヘッダー情報にアクセスできるようにカスタム JWT オブジェクトが必要になります。springs JWT を拡張し、作成時に解析を追加してヘッダーにアクセスすることにしました。返されたメタデータと rsakey 情報を解析するためのカスタム Pojo があると便利な場合もあります。

  • オーバーライドされた「デコード」メソッドを使用した JwtAccessTokenConverter の拡張。Azure は、返された id_token に "user_name" も "client_id" も与えないため、それらを追加する必要があります。また、スーパークラスにいくつかのロジックを含めました。

  • メモリ内のデフォルトをオーバーライドするカスタム UserDetailsManger。これにより、GraphAPI からユーザー情報を取得するか、ユーザー リポジトリから読み込むことができます。私は実際にはどちらも作成せず、代わりにデフォルトのメモリ内サービスを使用しましたが、それをトークン コンバーターに注入しました。その後、ユーザーが適切に認証されるたびに、それらをマネージャー ストアに追加するか、既に存在する場合は更新します。

まだやっていないことがいくつかあります。

  • RSA 検証は行われていません。これに関するヘルプをいただければ幸いです。
于 2016-03-03T19:41:37.463 に答える