Spring Security/OAuth 如何计算出 AuthenticationPrincipal
How does Spring Security/OAuth figure out the AuthenticationPrincipal
我有一个 spring 项目,它使用 spring-oauth2 和 spring-security 来使用 LDAP 身份验证提供程序进行身份验证。
在控制器中,我可以使用 @AuthenticationPrincipal
注释访问当前主体的 UserDetails
。
但是,当我使用 client_credential 令牌访问端点时,@AuthenticationPrincipal
是 String
,即 OAuth 客户端 ID。我知道当您使用 client_credentials 进行身份验证时没有用户的概念,但我想让我的 Principal 成为更丰富的数据类型。 spring 如何决定将我的委托人设置为 String
我可以覆盖该行为吗?
来自 Oauth2 规范
The client credentials (or other forms of client authentication) can
be used as an authorization grant when the authorization scope is
limited to the protected resources under the control of the client,
or to protected resources previously arranged with the authorization
server. Client credentials are used as an authorization grant
typically when the client is acting on its own behalf (the client is
also the resource owner) or is requesting access to protected
resources based on an authorization previously arranged with the
authorization server.
因为客户端也可以是资源所有者,所以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 项目,它使用 spring-oauth2 和 spring-security 来使用 LDAP 身份验证提供程序进行身份验证。
在控制器中,我可以使用 @AuthenticationPrincipal
注释访问当前主体的 UserDetails
。
但是,当我使用 client_credential 令牌访问端点时,@AuthenticationPrincipal
是 String
,即 OAuth 客户端 ID。我知道当您使用 client_credentials 进行身份验证时没有用户的概念,但我想让我的 Principal 成为更丰富的数据类型。 spring 如何决定将我的委托人设置为 String
我可以覆盖该行为吗?
来自 Oauth2 规范
The client credentials (or other forms of client authentication) can be used as an authorization grant when the authorization scope is limited to the protected resources under the control of the client, or to protected resources previously arranged with the authorization server. Client credentials are used as an authorization grant typically when the client is acting on its own behalf (the client is also the resource owner) or is requesting access to protected resources based on an authorization previously arranged with the authorization server.
因为客户端也可以是资源所有者,所以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
向已生成令牌。