マイクロサービスシステムを構築するためにSpring BootとSpring Cloudを適用するだけです。私はSpring Oauthもそれに適用します。正直なところ、すべてが完璧です。春は素晴らしい仕事をしています。 このシステムでは、JDBCデータソースを使用してOAuthサーバーの仕事を行い、UserDetails権限(1人のユーザーには複数の権限があります)に基づく権限を使用するマイクロサービスプロジェクトがあります。いくつかのマイクロサービスプロジェクトがリソースサーバの仕事をしています(Jerseyを使ってRest APIを公開しています)、アクセスセキュリティはOAuthベアラトークンの認証の許可に基づいています。Spring OAuth - リソースのリロードリソースのIDと認証の権限
リソースサーバーのOAuth設定クラスすべてが素晴らしいです。この
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/restservice/object/list")
.hasAuthority("PERMISSION_VIEW_OBJECT_LIST");
// ...
}
@Override
public void configure(ResourceServerSecurityConfigurer resources)
throws Exception {
resources.resourceId("abc-resource-id")
.tokenStore(new JdbcTokenStore(dataSource()));
}
@Bean
@ConfigurationProperties(prefix = "oauth2.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
}
のようなものです!私は新しいRESOURCEIDとして新しいmicroserviceプロジェクトを追加し、私はOAuthのクライアントのテーブルOAUTH_CLIENT_DETAILSにRESOURCE_IDSにRESOURCEID値を追加する場合は、すべての要求は、新しいリソースサービスリターンのAPIを休ませる
:しかし、私は2問題が発生しましたこのようなエラーが発生しました {"error": "access_denied"、 "error_description": "無効なトークンにはリソースID(xyz-resource-id)が含まれていません"} これは、ユーザーがログアウトして新しいアクセス権を取得するトークン。それは私がAccessトークンとRefresh token intテーブルOAUTH_ACCESS_TOKENとOAUTH_REFRESH_TOKENのレコードをデータベースに削除する場合にのみ有効です。
実行時にアクセス権が変更された場合、認証の権限が再ロードされないため、権限が変更される前にテーブルOAUTH_ACCESS_TOKENのアクセストークンのAUTHENTICATION値に古い権限が含まれています。この場合、変更された権限で新しいアクセストークンを取得するには、ログアウトして再ログインする必要があります。
この2つの問題を解決する方法はありますか? 私はSpring Cloud Brixton.SR4とSpring Boot 1.3.5.RELEASEを使用しています。
ありがとうございました。あなたは、リソースサーバーまたはOAuthサーバーでDefaultTokenServicesを拡張することを意味しますか?私のばかげて申し訳ありません、どのようにカスタムTokenServicesクラスを注入するように設定できますか? –
認証サーバーでは、ユーザーの詳細の読み込みを行う部分と同じです。私は私の答えに実装を追加しました –
ありがとう、私はそれを試してみます。 –