如何在Spring Boot中使用Spring Security Oauth2获取client_id和用户名?

时间:2019-04-22 16:53:00

标签: spring spring-boot spring-security spring-security-oauth2

我们将结合使用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中?您将如何构建它?

0 个答案:

没有答案