gpt4 book ai didi

java - Spring Boot Oauth2 注销端点

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:51:59 25 4
gpt4 key购买 nike

我有一个 Spring Boot REST 应用程序,分为资源服务器和 Auth 服务器 - 受无状态 Oauth2 安全保护。

我正在使用 spring security 和 Oauth2 启动器:

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

<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
</dependency>

资源服务器使用我的 application.properties 中的这一行简单地链接到 auth 服务器:

security.oauth2.resource.userInfoUri: http://localhost:9000/my-auth-server/user

授权服务器在数据库中存储使用凭据并具有以下配置:

@Configuration
@EnableAuthorizationServer
public class OAuth2Config extends AuthorizationServerConfigurerAdapter {

@Autowired
@Qualifier("userDetailsService")
private UserDetailsService userDetailsService;

@Autowired
private AuthenticationManager authenticationManager;

@Value("${gigsterous.oauth.tokenTimeout:3600}")
private int expiration;

// password encryptor
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}

@Override
public void configure(AuthorizationServerEndpointsConfigurer configurer) throws Exception {
configurer.authenticationManager(authenticationManager);
configurer.userDetailsService(userDetailsService);
}

@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory().withClient("gigsterous").secret("secret").accessTokenValiditySeconds(expiration)
.scopes("read", "write").authorizedGrantTypes("password", "refresh_token").resourceIds("resource");
}

}

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

/**
* Constructor disables the default security settings
*/
public WebSecurityConfig() {
super(true);
}

@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/login");
}

@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}

}

一切正常,我可以获取访问 token 并使用它从我的资源服务器获取 protected 资源:

curl -X POST --user 'my-client-id:my-client-secret' -d 'grant_type=password&username=peter@hotmail.com&password=password' http://localhost:9000/my-auth-server/oauth/token

但是,我不知道如何处理注销(一旦用户决定注销就使 token 无效)。我假设会提供一些端点来使 token 无效,或者我是否必须创建自己的端点来处理它?我不需要指定任何类型的 TokenStore bean,所以我不确定如何使当前 token 无效。如果有任何见解,我会很高兴 - 我发现的大多数教程都解释了如何使用 session 或 JWT token 处理此问题。

最佳答案

我遇到了这个问题并在 this post 上发布了解决方案.

它基本上是在从客户端应用程序注销后重定向到授权服务器上的端点,然后在那里以编程方式注销。

关于java - Spring Boot Oauth2 注销端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40563106/

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