Spring Oauth2 SSO:使用 AuthorizationServer 授予的权限
Posted
技术标签:
【中文标题】Spring Oauth2 SSO:使用 AuthorizationServer 授予的权限【英文标题】:Spring Oauth2 SSO: Use Authority granted by AuthorizationServer 【发布时间】:2015-09-28 04:17:35 【问题描述】:我的设置是一个授权服务器,我在其中对 ldap 进行身份验证。 当我直接从授权服务器请求用户时 他有一个特定的权限,具体取决于 ldap 组。
当我在调试时查看 ResourceServer 中的 Oauth2Authentication 时,只有 userAuthentication.details.authorities 具有此权限。任何其他权限都设置为 ROLE_USER。
是否可以使用 AuthorizationServer 提供的用户权限?
如果我使用 spring.oauth2.resource.tokenInfoUri 来检索权限,它可以工作。但我想使用 AuthorizationServer 提供的 UserDetails..
【问题讨论】:
【参考方案1】:解决方案是创建一个自定义 UserInfoTokenServices 并按照我在 answer to a very similar question 中的说明提供它。
在这个 UserInfoTokenServices 中,我能够从授权服务器的/users
endpoint 的响应中提取权限。
!!更新!!有了 Spring Boot 1.4.0,事情变得更简单了!
在 Spring Boot 1.4.0 中引入了 PrincipalExtractor。应实现此类以提取自定义主体(请参阅Spring Boot 1.4 Release Notes)。
如果它只是关于权限,你可以实现AuthoritiesExtractor。
【讨论】:
以上是关于Spring Oauth2 SSO:使用 AuthorizationServer 授予的权限的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security OAuth2 SSO 未经授权的 401 错误
带有 Spring Boot 的 OAuth2 SSO 没有授权屏幕