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 令牌访问端点时,@AuthenticationPrincipal
是 String
,它是 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 来实现授权服务器?