在Spring Security Oauth2版本2.0.7.RELEASE中请求多个作用域

时间:2015-07-21 19:21:53

标签: java spring spring-security spring-security-oauth2

我们有一个使用spring-security-oauth2:1.0的应用程序。我试图将其更改为较新版本spring-security-oauth2:2.0.7.RELEASE。如果我没有指定scope或如果我指定单个范围,则应用程序可以正常工作。我在请求多个范围时遇到问题,例如read,write,它曾在以前的版本中运行。

我请求的客户端拥有所有read,write and trust权限。

当我使用spring-security-oauth2:1.0时,为了获得一个令牌,我曾经像

那样进行一次调用
  

http://localhost:8080/oauth/token?grant_type=password&client_id=ws&client_secret=secret&scope=read,write&username=user@abc.com&password=temp123

如果你看到范围参数scope=read,write,通过请求这种方式,我曾经获得一个范围为read and write的令牌。

如果我尝试使用Oauth2版本2.0.7.RELEASE执行相同的操作(虽然有POST请求),我会收到Invalid Scope异常,因为tokenRequest正在执行read,write 1}}作为单一范围。我请求的客户端具有read,write and trust权限,但read,write不是其中之一。

如果我使用scope=writescope=read进行试用,则可以正常使用,因为readwrite是客户端范围的一部分。

如果我想在OAuth2 2.0.7.RELEASE中请求多个范围,我该怎么做?

1 个答案:

答案 0 :(得分:5)

我找到了正确的方法。您必须使用+来分隔范围,而不是以逗号分隔的范围。

例如:read+writewrite+trust

因此,以下POST请求正常工作。

  

http://localhost:8080/oauth/token?grant_type=password&client_id=ws&client_secret=secret&scope=读+写&安培; username=user@abc.com&密码= temp123

我希望它能帮助别人:)