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 中,我能够从授权服务器的/usersendpoint 的响应中提取权限。

!!更新!!有了 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 没有授权屏幕

Spring boot 2.0 整合 oauth2 SSO

使用JWT的OAuth2的SSO分析

Spring Cloud云架构 - SSO单点登录之OAuth2.0 根据token获取用户信息

(十三) 整合spring cloud云架构 - SSO单点登录之OAuth2.0 根据token获