Spring OAuth2 确定主体是 oauth2_client 还是基本用户

Spring OAuth2 determine if principal is oauth2_client or basic user

我有一个 ResourceServer 应用程序 (@EnableResourceServer) 连接到 AuthorizationServer (@EnableAuthorizationServer)。

我想支持两种资助类型:

  1. 授权码
  2. 客户端凭据

两者都正常工作,但我如何区分 Principal 基本用户 (使用授权代码流)还是 客户端 (使用客户端凭据)?

如果不能直接实现,您认为我应该创建一个特定的 role/authority 或范围(哪个更好?)来确定 Principal 何时是客户端?

完成身份验证后,您应该在 SecurityContext 中设置 org.springframework.security.oauth2.provider.OAuth2Authentication 实例,其中包含经过身份验证的用户和他们正在使用的客户端的详细信息。

这有一个 isClientOnly() 方法,如果使用客户端凭据授权,该方法将 return 为真。 如果您启用了 OAuth2 表达式,您还可以在 @PreAuthorize 标记中进行检查:

@PreAuthorize("#oauth2.isClient")