gpt4 book ai didi

spring - 在 Spring Security OAuth2(提供者)中使用作用域作为角色

转载 作者:IT老高 更新时间:2023-10-28 13:51:05 25 4
gpt4 key购买 nike

让我们考虑一个相当简单的假设应用程序,用户可以在其中阅读或撰写帖子。

有些用户可以阅读和撰写文章,而有些用户只能阅读它们。使用 Spring Security (3.2.1),我通过两个角色对此进行建模:

  • ROLE_WRITE:此角色授予用户撰写帖子的权限。
  • ROLE_READ:此角色授予用户阅读帖子的权限。

使用 Spring 安全性实现这一点相当简单......

现在我还想通过使用 Spring Security OAuth (version 2.0.0.M3 ATM) 实现 OAuth2 提供程序来允许第三方应用代表用户读取和写入帖子。 .

在授权步骤中,应用会询问用户是否愿意授予代表他们阅读和/或撰写帖子的权利。这里的用户在这里授予范围(而不是角色)。

然后,当 OAuth2 使用者调用我的 REST API 时,Spring Sec OAuth 授权授予的 token 并创建一个身份验证,其中包含用户及其所有角色和仅授予的范围。

问题(和问题)是我现在必须编写不同的安全逻辑,具体取决于 API 是由通常经过身份验证的用户调用(只需检查角色)还是通过 OAuth2 调用(检查角色 + 范围) .

是否可以在 Spring Security OAuth2 中“合并”角色和范围的概念,以便在授权步骤期间,用户授予应用他们拥有的 角色 的子集(并且拥有OAuth2 身份验证仅在授予的权限中报告这些)?这样当第 3 方应用程序进行 API 调用时,身份验证中的角色是授予的角色吗?这样我就不必编写任何 OAuth2 特定的安全逻辑。

最佳答案

作用域(和角色)是任意字符串,所以如果你想使它们相同是没有问题的。为了使访问规则声明相同,您可以编写一个 ExpressionHandler 来测试具有相同值的权限或范围,具体取决于它找到的 Authentication 的类型。

阅读评论后建议使用不同的方法:添加自定义 TokenStoreResourceServerTokenServices。这些是易于访问的扩展点,并允许修改 OAuth2Authentication 以便其授予的权限与范围相同。

然而,我的偏好是使用 OAuth2RequestFactory 控制允许的范围,在 token 授予时将它们限制为与用户权限一致的值。

关于spring - 在 Spring Security OAuth2(提供者)中使用作用域作为角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22417780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com