私は、別々の認証サーバとリソースサーバを持っています。どちらもSpringブートアプリケーションです。私は認証と承認のためにJWTトークンでOAuth2を使用しています。JWTトークンからSpringブートリソースサーバのプリンシパルを取得
私は、認証サーバにアクセスしてトークンを取得することができます:
curl -X POST --user 'client:secret' -d 'grant_type=password&username=john&password=123' http://localhost:9000/auth-server/oauth/token
とリソースサーバ(別のサーバー上で実行されている)からリソースを取得するときに、要求ヘッダーにトークンを取り付けることによって、それを使用しています。
私には不明な点は、どのユーザーがリソースサーバーにログインしているかを判断することです。認証サーバで
は、私はこのような何かを行うことができます:@RequestMapping("/user")
public Principal user(Principal user) {
return user;
}
と、このエンドポイントが使用されるトークンに基づいて、私に現在のユーザーを取得します。しかし、リソースサーバーで同じことをしようとすると、空の応答しか得られません。
リソースサーバーに何らかの形で認証されたユーザーのIDを取得して、データを返す必要があるかどうかを判断する必要があります(所有者のみがアクセスできるリソースがあります)。
どうすればいいですか?私はJWTを使うことで、同じトークンストアを共有する必要はないと思っていました。
私の質問がはっきりしない場合は、私はコードサンプルを提供することができます。私は私の前提が正しいことを確認しており、この動作を達成することができます - これは私の初めてのスプリングセキュリティを試しています。
リソースサーバは、application.propertiesに認証サーバにリンクされている:
security.oauth2.resource.userInfoUri: http://localhost:9000/auth-server/user
あなたは、万一、これを解決しましたか?私はJwtTokenStore()の代わりにInMemoryTokenStore()を使用してこれを動作させました。それでも、私はJwtTokenStore()を使って同じことを達成したいと思います。 – Yasin
残念ながらいいえ。私が今使用している方法は、認証サーバーとリソースサーバーで同じユーザー名を共有し、プリンシパルオブジェクトで渡されるこの一意のユーザー名を使用してユーザーを取得することです。 – Smajl