我有Spring-boot ui-server,其中包括Angular单页应用程序,我有第三方授权oauth2提供程序。我的spring-boot应用程序重定向到登录oauth2提供程序页面,得到"代码"并获取access_token。
我有两个问题:
我成功获得access_token但无法获取userInfo,auth服务器响应500(我没有访问auth服务器来调试某些内容,因此只有500响应错误)。我找到了一个解决方案:只需创建类ResourceServerTokenServices,就像CustomUserInfoTokenServices一样,并将Bean放入@Configuration类:
@Configuration 公共课Conf {
@Autowired
private ResourceServerProperties sso;
@Bean
public ResourceServerTokenServices myUserInfoTokenServices() {
return new CustomUserInfoTokenServices(sso.getUserInfoUri(), sso.getClientId());
}
}
安全属性:
security:
oauth2:
client:
accessTokenUri: https://authserver/oauth/token
userAuthorizationUri: https://authserver/oauth/authorize
clientId: client
clientSecret: secret
resource:
userInfoUri: https://authserver/user/get?format=json
preferTokenInfo: false
这很奇怪,但它有效!我不明白为什么标准配置不起作用。
a)从IDE开始 - 应用程序启动成功,安全性正常
b)从命令行开始,通过" spring-boot:run" - 应用程序开始成功,安全性正常
c)从" java -jar"开始从命令行开始 - 应用程序开始成功,但我得到了#34; 401 Unauthorized"并调用堆栈:
2016-02-24 13:16:50.378 DEBUG 4264 --- [nio-8080-exec-3] g.c.AuthorizationCodeAccessTokenProvider : Retrieving token from *****/oauth/token
2016-02-24 13:16:50.532 DEBUG 4264 --- [nio-8080-exec-3] g.c.AuthorizationCodeAccessTokenProvider : Encoding and sending form: {grant_type=[authorization_code], code=[160224ACS2gmbxvr1581], redirect_uri=[http://****/login]}
2016-02-24 13:16:50.907 DEBUG 4264 --- [nio-8080-exec-3] uth2ClientAuthenticationProcessingFilter : Authentication request failed: org.springframework.security.authentication.BadCredentialsException: Could not obtain access token
2016-02-24 13:16:50.907 DEBUG 4264 --- [nio-8080-exec-3] uth2ClientAuthenticationProcessingFilter : Updated SecurityContextHolder to contain null Authentication
当从命令行启动应用程序时,授权仅 。也许弹簧靴脂肪罐包装不能正常工作?