Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Security/OAuth如何计算AuthenticationPrincipal_Spring_Spring Mvc_Spring Security_Oauth 2.0_Spring Security Oauth2 - Fatal编程技术网

Spring Security/OAuth如何计算AuthenticationPrincipal

Spring Security/OAuth如何计算AuthenticationPrincipal,spring,spring-mvc,spring-security,oauth-2.0,spring-security-oauth2,Spring,Spring Mvc,Spring Security,Oauth 2.0,Spring Security Oauth2,我有一个spring项目,它使用spring-oauth2和spring安全性,使用LDAP身份验证提供程序进行身份验证 在控制器中,我可以使用@AuthenticationPrincipal注释访问当前主体的UserDetails 但是,当我使用客户端凭据标记点击端点时,@AuthenticationPrincipal是一个字符串,它是OAuth客户端id。我知道当您使用客户端凭据进行身份验证时,没有用户的概念,但我希望我的主体是一个更丰富的数据类型。spring如何决定将我的主体设置为字符串

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

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

但是,当我使用客户端凭据标记点击端点时,
@AuthenticationPrincipal
是一个
字符串,它是OAuth客户端id。我知道当您使用客户端凭据进行身份验证时,没有用户的概念,但我希望我的主体是一个更丰富的数据类型。spring如何决定将我的主体设置为
字符串
,我可以重写该行为?

来自Oauth2规范

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

因为客户机也可以是资源所有者,所以spring将基于您的客户机信息创建身份验证

我假设您有setup
org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter
,用于为客户端创建身份验证

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