gpt4 book ai didi

java - 如何使用 redis 使用 spring-security-oauth2 持久化 token

转载 作者:IT王子 更新时间:2023-10-29 06:03:13 25 4
gpt4 key购买 nike

这是我第一次使用 OAuth2 方法开发应用程序。我是根据某些教程开始的,我正在从这个 (http://websystique.com/spring-security/secure-spring-rest-api-using-oauth2/) 开始。

我会将应用程序部署到集群 WebSphere,据我所知,内存中将不起作用(... clients.inMemory().withClient ...)。

我想使用 Redis(我也是第一次使用),但我对如何在某些非 xml java 配置应用程序中设置它感到困惑。

我在 xml 中发现了某些类似的问题,但我仍然没有第一次尝试 ( Redis Token Store )。有趣的是,问题所有者在这里谈到了“Spring-Security OAuth 即 2.8.0 提供 RedisTokenStore”,但我发现“2.0.12.RELEASE”是最新的 mvn 发布版本。

也就是说,我的直截了当的问题是:如何调整下面的代码以依赖 Redis 而不是内存中的代码?

任何关于如何设置 RedisTokenStore 的评论都将不胜感激。

另外,如果添加这样的附加注释很容易,“.passwordEncoder”和“.secret”有什么区别?下面的代码依赖于带有硬编码表达式(固定值)的“.secret”,而我看到几个使用 jdbc 和“由 springframework.security.crypto.bcrypt.BCryptPasswordEncoder 填充的 passwordEncoder”的例子,这似乎更有意义。当我猜我使用“.secret”或“.passwordEncoder”时,我是对的吗?当我认为 secret 代表固定值而 passwordEncoder 代表动态值时,我是对的吗?

(使用“.passwordEncoder”和 clients.jdbc https://github.com/spring-projects/spring-security-oauth/blob/master/tests/annotation/jdbc/src/main/java/demo/Application.java#L102 的示例)

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

private static String REALM="MY_OAUTH_REALM";

@Autowired
private TokenStore tokenStore;

@Autowired
private UserApprovalHandler userApprovalHandler;

@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {

clients.inMemory()
.withClient("abc-trusted-client")
.authorizedGrantTypes("password", "authorization_code", "refresh_token", "implicit")
.authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
.scopes("read", "write", "trust")
.secret("abc-secret")
.accessTokenValiditySeconds(120).//Access token is only valid for 2 minutes.
refreshTokenValiditySeconds(600);//Refresh token is only valid for 10 minutes.
}

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.tokenStore(tokenStore).userApprovalHandler(userApprovalHandler)
.authenticationManager(authenticationManager);
}

@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.realm(REALM+"/client");
}

}

最佳答案

如果使用 Spring Boot,将依赖添加到 pom.xml 中:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

在 application.properties 中使用适当的参数设置 Redis 连接:

spring.redis.host=localhost
spring.redis.password=secret
spring.redis.port=6379

然后,将其添加到您的 AuthorizationServerConfiguration 类中,您就可以开始了:

@Bean
public TokenStore tokenStore(RedisConnectionFactory redisConnectionFactory) {
return new RedisTokenStore(redisConnectionFactory);
}

关于java - 如何使用 redis 使用 spring-security-oauth2 持久化 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42449017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com