0

我有一个授权服务器,它根据用户名和密码从数据库中获取用户详细信息以及角色。

现在在访问资源服务器中的受保护资源(通过access_token)时,我想根据角色授权其余调用。我该怎么做?因为,当我在资源服务器中检查 Principal 用户时,它得到了默认的 [ROLE_USER]

//Will @preAuthorize() work here ?
@RequestMapping(value="/pinaki", method=RequestMethod.GET)
public String home(Principal principal) {
    return "Hello World";
}

请指导..提前谢谢

4

1 回答 1

2

AFAIK spring-security-oauth2 仅支持获取开箱即用的共享公共数据存储(数据库或内存)的授权服务器/资源服务器的用户详细信息(包括角色)。

如果您确实有一个公共数据存储,则可以使用 InMemoryClientDetailsS​​ervice 或 JdbcClientDetailsS​​ervice。

但是,如果在您的设置中没有公共数据存储,那么您自己扩展它应该不会太难。此任务的关键接口是ClientDetailsS​​erviceResourceServerTokenServices

ResourceServerTokenServices 实现返回包含角色的 OAuth2Authentication。因此,您可以从此处的授权服务器调用 tokeninfo 端点。实现 ClientDetailsS​​ervice 并使用它会更优雅。在这里,您还需要调用 tokeninfo 端点。

在 XML 配置中,您可以在参数 token-services-ref 和 auth-details-source-ref 中设置要在 oauth:resource-server 标记中使用的 bean。有关 Java 配置的详细信息,请参见http://projects.spring.io/spring-security-oauth/docs/oauth2.html页

(我的信息是指 spring-security-oauth2 的 2.0.8 版本)

于 2016-01-19T13:51:50.343 回答