Spring OAuth2从访问令牌字符串中提取主体

问题描述

我在控制器中收到访问令牌,我需要从字符串访问令牌中提取Principal。在方法参数中不使用身份验证,因为在此对象中将是不同的用户。令牌的简单解码应该会有所帮助。任何人都只从访问令牌字符串知道该怎么做吗? 例子

@RequestMapping(value = "create",method = RequestMethod.POST)
public ResponseEntity create(Authentication authentication,@RequestParam("access_token") String accessToken) {
    //extract Principal from accessToken variable
}

解决方法

我不知道您为什么要在请求中发送另一个用户的令牌,我发现这很危险,因为访问令牌包含敏感信息(凭据)。我建议您通过创建类似操作或标识令牌(定义的架构将包含用户ID和要发送的信息)之类的方法来更改标识第二个用户的方式。

如果您还有其他未提及的假设,并且假设访问令牌是Jwt,则必须首先使用算法和用于对其进行哈希处理的私钥对其进行验证。如果它是有效令牌,则可以访问其内容。

@RequestMapping(value = "create",method = RequestMethod.POST)
public ResponseEntity create(Authentication authentication,@RequestParam("access_token") JwtAuthenticationToken accessToken) {
   // validate your accessToken
   // to access the token details
   accessToken.getTokenAttributes().get(A_KEY_IN_YOUR_TOKEN)
}

选中此class

,

一段时间后,我设法从访问令牌字符串中获取主体。

@Autowired
private TokenStore tokenStore;

@RequestMapping(value = "create",@RequestParam("access_token") String accessToken) {
    tokenStore.readAuthentication(accessToken).getPrincipal();
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...