【发布时间】:2014-04-20 11:58:06
【问题描述】:
让我们考虑一个相当简单的假设应用程序,用户可以在其中阅读或撰写帖子。
有些用户可以阅读和撰写文章,而有些用户只能阅读它们。使用 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 会授权授予的令牌并创建一个身份验证,其中包含用户及其所有角色和仅授予的范围。
问题(和问题)是我现在必须编写不同的安全逻辑,具体取决于 API 是由通常经过身份验证的用户调用(只需检查角色)还是通过 OAuth2 调用(检查角色 + 范围) .
是否可以在 Spring Security OAuth2 中“合并”角色和范围的概念,以便在授权步骤期间,用户授予应用程序他们拥有的 角色 的子集(并且拥有OAuth2 身份验证仅在授予的权限中报告这些)?这样当第 3 方应用程序进行 API 调用时,身份验证中的角色是授予的角色吗?这样我就不必编写任何 OAuth2 特定的安全逻辑。
【问题讨论】:
标签: spring oauth spring-security oauth-2.0 spring-security-oauth2