Spring Security oAuth抱怨即使定义了JWT验证程序密钥也丢失

时间:2018-12-02 19:45:32

标签: java spring spring-boot oauth-2.0

我正在将应用程序从Spring Boot 1.5迁移到Spring Boot2。这需要更新项目使用的oAuth2库,因为从Spring Boot 2开始,spring-security-oauth2库已被{{1}取代}(据我了解)。

无论哪种方式,即使我显然拥有spring-security-oauth2-autoconfigure文件中定义的密钥的URI以及其他oAuth2配置,我的项目在启动过程中都会抱怨JWT验证密钥(oAuth2要求)丢失了,如下:

application.yml

启动过程中出现的错误是:

security:
  oauth2:
    client:
      userAuthorizationUri: ${uaa.url}/oauth/authorize
      accessTokenUri: ${uaa.url}/oauth/token
      clientId: ${security.oauth2.client.client-id}
      clientSecret: ${security.oauth2.client.client-secret}
    resource:
      jwt:
        keyUri: ${uaa.url}/oauth/token_key

此配置在我使用Spring Boot 1.5.x之前一直运行良好,但是在升级到Spring Boot 2(并移至*************************** APPLICATION FAILED TO START *************************** Description: Binding to target org.springframework.boot.autoconfigure.security.oauth2.resource.ResourceServerProperties@468bb799 failed: Property: resourceServerProperties.tokenInfoUri Value: null Reason: Missing tokenInfoUri and userInfoUri and there is no JWT verifier key 库)之后,我开始遇到此问题。

我可以通过访问上面配置中定义为spring-security-oauth2-autoconfigure的URL来访问浏览器中的密钥,因此显然这是一个有效的URL。这可能是什么问题?

编辑:我在几个地方在线找到的解决方案之一是添加一个虚拟的userInfoUri值,如下所示:

keyUri: ${uaa.url}/oauth/token_key

我尝试了这个,仍然出现相同的错误。

2 个答案:

答案 0 :(得分:1)

spring:
  security:
    oauth2:
      client:
        clientId: xxxxxxxxxxxxxxxxxxxx
        clientSecret: xxxxxxxxxxxxxxxxxxxxxxxx
        accessTokenUri: https:graph.facebook.com/oauth/access_token
        userAuthorizationUri: https://www.facebook.com/dialog/oauth
        tokenName:  oauth_token
        authenticationScheme: query
        clientAuthenticationScheme: form
        scope: profile email
      resource:
        userInfoUri: https://graph.facebook.com/me

我在我的application.yml中使用了它,终于可以了。您只需要使用 spring:(对我有用)将其细分。

此外,我认为您应该改用spring-boot-starter-oauth2-client。

答案 1 :(得分:0)

security:
  oauth2:
    client:
      clientId: xxxx
      clientSecret: xxxx
      accessTokenUri: https://www/yyy.com/.well-known/oauth-authorization-server
      userAuthorizationUri: https://www/yyy.com/.well-known/oauth-authorization-server
      scope: openid profile email
    resource:
      userInfoUri: https://www/yyy.com/.well-known/oauth-authorization-server
    sso:
      loginpath: /authorization-code/callback

在application.yaml文件中帮了我大忙。