让我们考虑一个相当简单的假设应用程序,用户可以在其中阅读或撰写帖子。
一些用户可以阅读和撰写文章,而另一些用户只能阅读它们。使用 Spring Security (3.2.1),我通过具有 2 个角色来建模:
- 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 特定的安全逻辑。