Spring Security/OAuth 如何找出 AuthenticationPrincipal

Posted

技术标签:

【中文标题】Spring Security/OAuth 如何找出 AuthenticationPrincipal【英文标题】:How does Spring Security/OAuth figure out the AuthenticationPrincipal 【发布时间】:2015-10-22 08:35:07 【问题描述】:

我有一个 spring 项目,它使用 spring-oauth2 和 spring-security 进行身份验证,使用 LDAP 身份验证提供程序。

在控制器中,我可以使用 @AuthenticationPrincipal 注释访问当前主体的 UserDetails

但是,当我使用 client_credential 令牌访问端点时,@AuthenticationPrincipalString,它是 OAuth 客户端 ID。我知道当您使用 client_credentials 进行身份验证时没有用户的概念,但我想让我的 Principal 成为更丰富的数据类型。 spring 如何决定将我的主体设置为String,我可以覆盖该行为吗?

【问题讨论】:

【参考方案1】:

来自 Oauth2 规范

客户端凭据(或其他形式的客户端身份验证)可以 当授权范围为 仅限于受客户控制的受保护资源, 或授权之前安排的受保护资源 服务器。客户端凭据用作授权授予 通常当客户代表自己行事时(客户是 也是资源所有者)或正在请求访问受保护的 资源基于先前安排的授权 授权服务器。

因为客户端也可以是资源所有者,所以spring会根据你的客户端信息创建认证。

我假设您已经设置了org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter,它用于为客户端创建身份验证。

您可以创建自己的自定义org.springframework.security.oauth2.provider.client.ClientDetailsUserDetailsService 或创建自己的org.springframework.security.authentication.AuthenticationProvider 来覆盖身份验证对象的创​​建方式,但我更喜欢使用org.springframework.security.oauth2.provider.token.TokenEnhancer 向生成的令牌添加额外信息。

【讨论】:

以上是关于Spring Security/OAuth 如何找出 AuthenticationPrincipal的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security/OAuth 如何找出 AuthenticationPrincipal

如何使用spring-security,oauth2调整实体的正确登录?

如何使用 XML 使用 Spring Security Oauth2 启用 /oauth/check_token

我们如何使用带有 Spring 5.0 的最新 spring-security-oauth2 jar 来实现授权服务器?

Spring Security OAuth2 - 如何使用 OAuth2Authentication 对象?

如何导入 Spring Security OAuth 授权服务器?