現在Spring OAuth 2.0 In Memory Token Storeを使用しているアプリケーションがあります。永続化ファイルを使用するには、Spring Security OAuth 2.0 JARを変換する必要がありますサーバーの再起動時にアクセストークンが有効であることを確認するために、メモリ内よりも。SpringOAuth 2.0 JARは、JdbcTokenStoreメソッドを使用してMYSQLデータベースをサポートするルーチンを提供しますが、そのドキュメントを見つけることができません。デフォルトの構成(InMemoryTokenStoreメソッドを使用)を変更して、サポートされているJdbcメソッドを利用する方法を示します。
Spring Security OAuth 2.0 JdbcTokenStoreメソッドを実装し、それを行うために必要な構成の例を提供するか、またはプロセス。インターネットで高低を検索しましたが、そのようなドキュメントは見つかりません。
Spring Securityは既に見つかりましたOAuth 2.0トークンストアのスキーマファイルです。興味がある場合は、テストリソースディレクトリでのみ見つかります。その存在は、Pivotalのいずれにも記載されていません。ドキュメンテーションWebサイト必要に応じて、Pivotalの残りのソースコードを読むことができますが、このパスを使用しなくても済む人がいることを願っています。
あなたが提供できるあらゆる助けを事前に感謝します。
これは私がやった方法です。
ステップ1:2つのテーブルを作成する(oauth_access_tokenおよびoauth_refresh_token)
CREATE TABLE `oauth_access_token` (
`authentication_id` varchar(255) NOT NULL,
`token_id` varchar(255) NOT NULL,
`token` blob NOT NULL,
`user_name` varchar(255) NOT NULL,
`client_id` varchar(255) NOT NULL,
`authentication` blob NOT NULL,
`refresh_token` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `oauth_access_token`
ADD PRIMARY KEY (`authentication_id`);
CREATE TABLE `oauth_refresh_token` (
`token_id` varchar(255) NOT NULL,
`token` blob NOT NULL,
`authentication` blob NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ステップ2:AuthorizationServerConfigクラスを構成する
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private TokenStore tokenStore;
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.authenticationManager(authenticationManager).tokenStore(tokenStore);
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory().withClient("my-trusted-client")
.authorizedGrantTypes("client_credentials", "password","refresh_token")
.authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT").scopes("read", "write", "trust")
.resourceIds("oauth2-resource")
.accessTokenValiditySeconds(5000)
.refreshTokenValiditySeconds(50000)
.secret(passwordEncoder.encode("secret"));
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.checkTokenAccess("isAuthenticated()");
}
}
ステップ3:
@Configuration
public class AppConfig {
@Value("${spring.datasource.url}")
private String datasourceUrl;
@Value("${spring.datasource.driver-class-name}")
private String dbDriverClassName;
@Value("${spring.datasource.username}")
private String dbUsername;
@Value("${spring.datasource.password}")
private String dbPassword;
@Bean
public DataSource dataSource() {
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(dbDriverClassName);
dataSource.setUrl(datasourceUrl);
dataSource.setUsername(dbUsername);
dataSource.setPassword(dbPassword);
return dataSource;
}
@Bean
public TokenStore tokenStore() {
return new JdbcTokenStore(dataSource());
}
}