我们将结合使用Spring Boot 2和Spring Security Oauth2以及JWT承载令牌。一切正常,我还可以在资源服务器中使用基于方法的安全注释,例如:
@PreAuthorize("#oauth2.hasScope('some-scope:read') and hasAuthority('OP_SOME_OPERATION_READ')")
我们还使用Spring Boot身份验证服务器,该服务器为客户端和用户提供PostgreSQL支持的所有Oauth2授予类型。
现在,我们需要资源服务器中来自JWT令牌/ UserDetails的一些信息。特别是我们需要client_id,如果给定用户名或user_id。这两个信息都包含在JWT令牌中,该令牌看起来像这样:
{
"aud": [
"someResourceId"
],
"user_name": "someUserIdOrEmail",
"scope": [
"some-scope:read"
],
"exp": 1555030519,
"authorities": [
"ROLE_ADMIN",
"ROLE_USER"
],
"jti": "71asdasd-9demo-4458-8demo-ee04edemo8",
"client_id": "someClientId"
}
目前,可以通过以下方式检索用户名:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String username = authentication.getPrincipal().toString();
将来如何获取client_id或一些元信息?我认为,如果JWT令牌中包含某些内容,则应该可以将其连接到UserDetailsImpl中?您将如何构建它?