关于extractAuthentication的Spring Oauth2 RemoteTokenServices错误

时间:2015-06-03 12:40:03

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

我有一个资源服务器和一个auth服务器。

在资源请求时,它会在/oauth/check_token端点上验证与auth服务器一起收到的access_token。这会产生一个响应,使我的请求崩溃。

响应发送方式为:

Written [{exp=1433335640, scope=[read, write], authorities=[ROLE_USER], client_id=client-w-s}] as "application/json;charset=UTF-8" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@58a88f5a]

当我的资源服务器收到它时:

2015-06-03 14:17:48.277 DEBUG 9492 --- [nio-8181-exec-3] o.s.web.client.RestTemplate              : POST request for "http://localhost:6707/oauth/check_token" resulted in 200 (OK)
2015-06-03 14:17:48.277 DEBUG 9492 --- [nio-8181-exec-3] o.s.web.client.RestTemplate              : Reading [interface java.util.Map] as "application/json;charset=UTF-8" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@67409450]
2015-06-03 14:17:48.283 ERROR 9492 --- [nio-8181-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception

java.lang.ArrayStoreException: null
    at java.util.ArrayList.toArray(Unknown Source)
    at org.springframework.security.oauth2.provider.token.DefaultAccessTokenConverter.extractAuthentication(DefaultAccessTokenConverter.java:139)

这是它失败的代码:

Collection<? extends GrantedAuthority> authorities = null;
if (user==null && map.containsKey(AUTHORITIES)) {
    @SuppressWarnings("unchecked")
    String[] roles = ((Collection<String>)map.get(AUTHORITIES)).toArray(new String[0]);
    authorities = AuthorityUtils.createAuthorityList(roles);
}

我在调试模式下运行以检查map中的值,看起来我觉得它应该从我的auth服务器构建的响应来判断。

请告诉我是否需要发布更多信息。

有没有人经历过这个或有任何关于如何解决它的线索?

2 个答案:

答案 0 :(得分:0)

我找到了&#34;解决方案&#34;。

我的pom文件中存在版本不匹配。当我的auth服务器正在运行spring-security-oauth2-2.0.5.RELEASE时,我的资源服务器正在运行spring-security-oauth2-2.0.7.RELEASE

版本以不同方式声明响应。

答案 1 :(得分:0)

我认为DefaultAccessTokenConverter实现中存在错误,因为spring-security-oauth2 2.0.7.RELEASE,因为这一行:

if( user == null &amp;&amp; map.containsKey(AUTHORITIES)){ ... }

为什么&#34; 用户== null &#34;条件? &#34;用户&#34;变量不为空,因此条件永远不为真,并且未填充权限数组。

我认为这是Spring Security Oauth2实现错误。