在Spring安全OAuth2(提供程序)中使用作用域作为角色 让我们考虑一个相当简单的假设应用程序,用户可以读或写文章。
一些用户可以阅读和撰写文章,而另一些用户只能阅读。使用Spring Security(3.2.1),我通过两个角色对此进行建模:在Spring安全OAuth2(提供程序)中使用作用域作为角色 让我们考虑一个相当简单的假设应用程序,用户可以读或写文章。,spring,oauth,spring-security,oauth-2.0,spring-security-oauth2,Spring,Oauth,Spring Security,Oauth 2.0,Spring Security Oauth2,一些用户可以阅读和撰写文章,而另一些用户只能阅读。使用Spring Security(3.2.1),我通过两个角色对此进行建模: ROLE_WRITE:此角色授予用户写文章的权限 ROLE_READ:此角色授予用户阅读文章的权限 用Spring安全性实现这一点相当简单 现在,我还希望通过使用实现OAuth2提供程序,允许第三方应用程序代表用户读写文章 在授权步骤中,应用程序会询问用户是否愿意授予其阅读和/或写文章的权利。此处的用户正在此处授予作用域(而不是角色) 然后,当OAuth2使用者调
- ROLE_WRITE:此角色授予用户写文章的权限
- ROLE_READ:此角色授予用户阅读文章的权限
ExpressionHandler
,根据找到的Authentication
类型,使用相同的值测试权限或作用域
阅读注释后,您会发现另一种方法:添加自定义TokenStore
或ResourceServerTokenServices
。这些是易于访问的扩展点,允许修改OAuth2Authentication
,使其授予的权限与作用域相同
但是,我的首选是使用OAuth2RequestFactory控制允许的作用域,在令牌授予点将其限制为与用户权限一致的值。您可以配置自己的AccessTokenConverter(主要用于JWT)并从JWT访问令牌中提取您想要的声明,并生成一个Authority对象。只需定义一个返回AccessTokenConverter的Bean工厂谢谢Dave。我忘了提到我在我的服务方法上使用@Secured注释(我没有使用Spring-Sec HTTP-path-security/antMatchers(“/path”).access(…)。这种方法还能用吗?我不明白为什么不能。现在我们正在讨论“你做了什么,为什么它不起作用?”似乎我可以用我自己的impl-in-GlobalMethodSecurityConfiguration.accessDecisionManager替换RoleVoter。这将处理@Secured方法,但对于直接访问authentication.getAuthories()的任何其他代码,我都必须小心。在浏览了一些代码之后,在我的例子中,似乎最简单的方法是实现我自己的OAuth2AuthenticationManager,它将只返回具有授权权限的身份验证。我看到它在OAuth2ResourceServerConfigurer.oauthAuthenticationManager中被实例化。是否有一个易于与我自己的进行交换的方法?我们没有向java config builder公开这个方法,但是过滤器上有一个setter。所以当我们在SpringOAuth中整理它时,您可以自己使用它(而不是使用
@enableSourceServer
)。如果愿意,可以在GitHub中提出问题。最后一条评论:如果我是你,我会使用自定义的TokenStore
(或ResourceServerTokenServices
),您可以在@enableSourceServer
适配器中自定义。