当前位置: 首页 > 知识库问答 >
问题:

SpringSecurity/OAuth如何计算AuthenticationPrincipal

柯波
2023-03-14

我有一个Spring项目,它使用sping-oaust2和sping-Security使用LDAP身份验证提供程序进行身份验证。

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

然而,当我使用client_credential令牌到达endpoint时,@AuthenticationPrincipal是一个String,它是OAuth客户端id。spring如何决定将我的主体设置为一个<code>String

共有1个答案

敖涵容
2023-03-14

从Oau2规范

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

由于客户端也可以是资源所有者,因此Spring将根据您的客户端信息创建身份验证。

我假设您已经安装了<code>org.springframework.security.outh2.provider.client。ClientCredentialsTokenEndpointFilter,用于为客户端创建身份验证。

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

 类似资料:
  • 问题内容: 当我在实现接口的Eclipse中创建Java类时,收到警告 可序列化的类ABCD没有声明类型为long的静态最终serialVersionUID字段 因此,当我单击警告时,我在Eclipse中获得了一个选项 添加生成的序列号ID 选择该选项后,Eclipse会自动为我创建一个变量。 现在我想知道该数字是在什么基础上生成的。这是一个随机数吗?我可以提供自己的随机数吗? 问题答案: 它是根

  • 我想知道如何计算的累计总和在AnyLogic中。具体地说,我有一个循环事件,每周改变一个参数的值。从这个参数我想计算它收到的值的累计总和,我怎么做呢? 该事件是循环模式的超时。操作是: "name_parameter"=圆形(max(正常(10,200),0));

  • 我们使用Spring Security OAuth2保护我们的REST服务(用于服务器到服务器通信,不涉及用户)。但是,当您尝试访问浏览器中的受保护资源时,它将显示: 我们希望这是我们自己选择的自定义页面。有办法吗? 设置“拒绝访问”页面不起作用。首先,它需要定义一个登录页面,我们没有,因为这是一个纯服务器到服务器的通信。另一个原因是,这个属性自Spring 3.0..或类似的版本以来就被弃用了。

  • 问题内容: 该方法在Java中返回什么值? 我读到它是一个对象的内存引用…的哈希值是1;的哈希值是97。 我很困惑:是ASCII还是什么类型的值? 问题答案: 哈希码是一个整数值,表示被调用的对象的状态。这就是为什么将设置为1的an 返回哈希码“ 1”的原因,因为哈希码及其值是相同的。字符的哈希码等于其ASCII字符码。如果编写自定义类型,则负责创建一个最佳实现,该实现将最能代表当前实例的状态。

  • 问题内容: 如果用户输入为2255,而我的输出应为10分钟,那么我如何计算24小时内的时差。我的想法是将输入分为2个部分,2位数字和2位数字。前2位数字是小时,将其乘以60使其变为分钟。然后再加上第二个2位数字,然后计算出差异。我不想使用任何日期日历数据类型或API来解决它。谢谢 问题答案: 如何在不使用String chartAt的情况下获取前两位数字。 最高两位数:数字/ 100最低两位数:数

  • 问题内容: 这是我的JSON: 如何计算其中的对象数量? 问题答案: 那是一个数组。 您可以解析它(),然后使用该属性。