从授权服务器获取资源服务器中的用户角色

时间:2016-01-15 08:42:20

标签: spring-boot spring-security-oauth2 spring-oauth2

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

现在在访问资源服务器中的受保护资源(传递access_token)时,我想基于角色授权其余的调用。我该怎么做? 因为,当我在资源服务器中检查Principal用户时,它获取默认值[ROLE_USER]

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

请指导..谢谢提前

1 个答案:

答案 0 :(得分:2)

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

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

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

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版本)