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

在Spring Security OAuth2(provider)中使用作用域作为角色

葛晔
2023-03-14

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

一些用户可以阅读和写文章,而另一些用户只能阅读。在Spring Security(3.2.1)中,我通过两个角色对其进行建模:

  • role_write:此角色授予用户编写文章的访问权限。
  • role_read:此角色授予用户读取文章的权限。

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

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

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

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

共有1个答案

焦兴为
2023-03-14

作用域(和角色)是任意字符串,所以如果您想使其相同,就没有问题。要使访问规则声明相同,您可以编写一个expressionhandler,该expressionhandler,根据它找到的authentication的类型,使用相同的值测试权限或作用域。

在阅读注释后,会出现一种不同的方法:添加自定义的TokenStoreResourceServerTokenServices。这些是易于访问的扩展点,允许修改oauth2authentication,使其授予的权限与作用域相同。

但是,我更喜欢使用oauth2requestfactory来控制允许的范围,在令牌授予时将其限制为与用户权限一致的值。

 类似资料:
  • Atom支持语言特定的设置。你可以在Markdown文件中软换行,或者在Python中把tab的宽度设置为4。 语言特定的设置只是一些东西的子集,我们把它叫做“作用域设置”。作用域设置可以只作用于一类特定的语法符号。比如你可以仅仅对Ruby的注释,Markdown中的代码段,或者JavaScript函数名称进行设置。 语法符号中的作用域名称 编辑器的每个符号都有一系列的作用域名称。例如,前面提到的

  • 问题内容: 我将JSF 2用于视图,将Spring用于业务逻辑。我正在尝试使用注解(@Scope(“ session”))将会话范围设置为我的一个Spring bean,但是却遇到了这个异常: 我知道RequestContextListener。在我的web.xml中。我还添加了RequestContextFilter: 似乎没有任何作用。我究竟做错了什么?谢谢! 问题答案: 尝试使用aop:sc

  • 2.7. 作用域 一个声明语句将程序中的实体和一个名字关联,比如一个函数或一个变量。声明语句的作用域是指源代码中可以有效使用这个名字的范围。 不要将作用域和生命周期混为一谈。声明语句的作用域对应的是一个源代码的文本区域;它是一个编译时的属性。一个变量的生命周期是指程序运行时变量存在的有效时间段,在此时间区域内它可以被程序的其他部分引用;是一个运行时的概念。 句法块是由花括弧所包含的一系列语句,就像

  • 本章阐述的主要包括全局作用域、函数外作用域、函数内作用域、引入代码作用域。魔方加密 PHP 规范对作用域部分进行了较大的修改,请您认真阅读下面的内容,避免代码出现问题。 <?php // 函数外作用域 function test ( ) { // 函数内作用域 include 'file.php'; // 文件中的代码处于 引入

  • 学习过 Java 的同学都知道,Java 的类里面可以给方法和属性定义公共的( public )或者是私有的 ( private ),这样做主要是为了我们希望有些函数和属性能给别人使用或者只能内部使用。 通过学习 Python 中的模块,其实和 Java 中的类相似,那么我们怎么实现在一个模块中,有的函数和变量给别人使用,有的函数和变量仅仅在模块内部使用呢? 在 Python 中,是通过 _ 前缀

  • 大家好,我正在尝试通过PowerShell连接到Microsoft Graph API。我正在使用一个作用域,一切似乎都很好,甚至Fiddler也显示了正确的作用域,但我在我的令牌中得到了所有的作用域。 我使用MSAL程序集:Microsoft.Identity.client.dll 它看起来仍然加载。default作用域。别担心,这是一个测试环境;-)。 是因为范围内的其中一个吗?电子邮件ope