我有两个使用spring boot创建的微服务。 1个微服务具有oauth2认证服务,另一个是oauth2资源服务器。
资源服务器使用RemoteTokenService检查访问令牌是否有效。这是有效的,当我创建一个休息端点并提供一个Principal参数时,提供了登录用户的主体。例如:
@RequestMapping(method = RequestMethod.GET, value = "/api/user/{id:[0-9]+}")
@PreAuthorize("hasAnyAuthority('ROLE_USER')")
public User getUser(@PathVariable("id") long id, Principal principal) {
}
问题是Principal包含登录用户的用户名和权限,我还需要用户信息,例如用户的id。
我不想再进行额外的休息调用以获取用户数据,所以我还在那里游荡,以便让remotetokenservice返回更多信息?
答案 0 :(得分:0)
RemoteTokenServices
只会调用Spring Security的CheckTokenEndpoint
,并将映射值返回给资源服务器。
如果您想获得更多信息,则必须在身份验证服务器中实施CheckTokenEndpoint::checkToken
方法。
我们设法通过spring-oauth2与JWT集成来解决您的问题。因此,身份验证服务器会生成一个访问令牌作为声明(在对用户进行身份验证之后),它可以保存更多可能在资源服务器上有用的信息。在这种情况下,资源服务器不需要远程调用来检查令牌,但它验证JWT的签名以接受声明。