从Spring Security Oauth2中的Token Store检索访问和刷新令牌的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Spring Security Oauth2中的Token Store检索访问和刷新令牌的方法相关的知识,希望对你有一定的参考价值。

如果您在令牌的内存存储中使用,是否有办法从Spring Security Oauth2中的TokenStore检索访问和刷新令牌?

是否有任何端点可以使这更容易,还是有任何其他解决方法?

根据我的分析,TokenEndpoint除了/ oauth / token之外不提供任何端点:https://docs.spring.io/spring-security/oauth/apidocs/org/springframework/security/oauth2/provider/endpoint/TokenEndpoint.html

答案

如果您在配置中将TokenStore定义为Bean,则可以将其注入您自己的控制器中:

@Configuration
@EnableAuthorizationServer
public class AuthServerOAuth2Config extends AuthorizationServerConfigurerAdapter {
    //...
    @Bean
    public TokenStore tokenStore() {
       return new InMemoryTokenStore();
    }
}

在控制器中,您可以提供一个读取令牌并返回它们的处理程序:

@RestController
@RequestMapping("/api/tokens")
public class TokensEndpoint {
  @Autowired
  TokenStore tokenStore;

  @GetMapping
  public ResponseEntity<List<String>> allTokens(@RequestParam String clientId) {
    Collection<OAuth2AccessToken> tokens = tokenStore.findTokensByClientId(clientId);
    List<String> tokenValues = tokens.stream().map(OAuth2AccessToken::getValue).collect(Collectors.toList());
    return ResponseEntity.ok(tokenValues);
  }
}

您应该注意端点本身是否正确安全。

然后你可以像这样检索访问令牌:

curl -X GET 'http://localhost:8080/api/tokens?clientId=sampleClientId'

如果您还想包含刷新令牌,则只需要在处理程序方法中扩展映射。

以上是关于从Spring Security Oauth2中的Token Store检索访问和刷新令牌的方法的主要内容,如果未能解决你的问题,请参考以下文章

Spring security oauth2 - 从 OAuth2 主体获取自定义数据

一个应用程序中的 Spring Security OAuth2 身份验证和表单登录

Rest API 中的 Spring Security Oauth2

使用 Spring Security 的 OAuth 2.0 中的 resourceId 是啥意思

面对拒绝访问 (403) - spring security oauth2 中的禁止错误

Spring boot,Security,OAuth2:是不是可以使用自定义 AuthorizationCodeResourceDetails?身份验证服务器需要重定向 url 中的特定参数