SpringCloudOAuth2常见异常

Possible CSRF detected - state parameter was required but no state could be found

客户端@EnableOAuth2Sso去验证服务器登陆返回后应该去自动调用access_token。但是报如上的错误,Dubug代码,发现
2018-07-03 12:05:33.567 DEBUG 11224 --- [nio-8090-exec-6] o.s.b.f.s.DefaultListableBeanFactory : Creating instance of bean 'scopedTarget.oauth2ClientContext'
创建了一个新的oauth2ClientContext,这个里面preservedState(也就是Redirect_url)为null,导致AuthorizationCodeAccessTokenProvider.obtainAccessToken()时直接报错。
解决方案参见https://github.com/spring-projects/spring-security-oauth/issues/322,添加如下配置就解决了这个问题

server.servlet.session.cookie.name=OAUTH2SESSION

通过Firefox的F12查看网络访问情况,可以看到第一次/login,访问的JSESSIONID是一个,然后登陆后返回http://localhost:8090/login?code=olfqvA&state=ERknC6,这时返回一个响应Cookie,这里包含一个JSESSIONID,然后Sso服务器用返回的这个JSESSIONID去调用/oauth/token,因为服务器没有这个session,所以新创建了一个Oauth2ClientContext,导致错误的发生。

你可能感兴趣的:(spring,security)