Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java angularjs,spring boot,spring security oauth2,只有从命令行启动应用程序时,授权才会失败_Java_Angularjs_Spring_Spring Security_Spring Security Oauth2 - Fatal编程技术网

Java angularjs,spring boot,spring security oauth2,只有从命令行启动应用程序时,授权才会失败

Java angularjs,spring boot,spring security oauth2,只有从命令行启动应用程序时,授权才会失败,java,angularjs,spring,spring-security,spring-security-oauth2,Java,Angularjs,Spring,Spring Security,Spring Security Oauth2,我有SpringBootUI服务器,其中包括Angular单页应用程序,我有第三方授权oauth2提供程序。我的spring boot应用程序重定向到登录oauth2提供程序页面,获取“代码”并获取访问令牌 我有两个问题: 我成功地获得了access_令牌,但无法获得userInfo,auth server respond 500(我没有权限到auth server调试某些东西,所以在响应中只得到了500个错误)。我找到了一个解决方案:只需像CustomUserInfoTokenServices

我有SpringBootUI服务器,其中包括Angular单页应用程序,我有第三方授权oauth2提供程序。我的spring boot应用程序重定向到登录oauth2提供程序页面,获取“代码”并获取访问令牌

我有两个问题:

  • 我成功地获得了access_令牌,但无法获得userInfo,auth server respond 500(我没有权限到auth server调试某些东西,所以在响应中只得到了500个错误)。我找到了一个解决方案:只需像CustomUserInfoTokenServices一样创建ResourceServerTokenServices类,并将其放入@Configuration类:

    @配置 公共类配置{

    @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) 通过“springboot:run”从命令行启动-应用程序启动成功,安全性正常

    c) 通过“java-jar”从命令行开始-应用程序启动成功,但我得到了“401未经授权”和调用堆栈:

    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
    

    因此,只有从命令行启动应用程序时,授权才会失败。可能spring boot fat jar打包无法正常工作?

    是否尝试验证打包的.jar文件是否包含应用程序设置文件?记住,一个.jar文件只是一个压缩的目录,所以您可以轻松地解压缩它并检查它。是的,打包的jar包含所有设置的application.yml文件!身份验证链中的第一个操作——重定向到oauth2服务器(auth服务器URL已经在application.yml中)登录页面,运行正常,但问题只是获取令牌。当我通过spring boot再次切换回启动应用程序时:run或run from NetBeans所有身份验证过程都会成功并获得访问权\u令牌