【问题标题】:Spring Security 5 OAuth2 Client with Gitlab failed带有 Gitlab 的 Spring Security 5 OAuth2 客户端失败
【发布时间】:2023-04-06 17:02:01
【问题描述】:

我正在尝试在我的项目中将 Spring Security 5 OAuth2/OIDC 与 GitLab 集成,并按照官方示例代码oauth2login,添加我的 Gitlab 配置,如下所示。

security:
 oauth2:
  client:
    registration:

      gitlab:
        client-id: 0cef9527091bb2faec01610a0fb330e3a915672110cf3298ff3aadceaa8ab11f
        client-secret: fd84439d06f7a2dabb5d5a64ac478211ab4009aa0fa62d478661a52f4234de72
        authorization-grant-type: authorization_code
        redirectUriTemplate: '{baseUrl}/login/oauth2/code/{registrationId}'
        scope:
          - openid
          - api
        clientName: GitLab
    provider:
     gitlab:
        authorization-uri: https://gitlab.com/oauth/authorize
        token-uri: https://gitlab.com/oauth/token
        user-info-uri: https://gitlab.com/oauth/userinfo
        jwk-set-uri: https://gitlab.com/oauth/discovery/keys

我在我的 Gitlab 设置账户中创建了一个应用程序,将它的授权回调 url 设置为:http://localhost:8080/login/oauth2/code/gitlab

当我通过mvn spring-boot:run 运行应用程序时。并点击Gitlab,点击GitLab授权页面中的Authorize按钮。

然后页面返回到http://localhost:8080/login,控制台出现异常如下:

  at position 15931.
    at com.nimbusds.jose.util.JSONObjectUtils.parse(JSONObjectUtils.java:75) ~[nimbus-jose-jwt-5.4.jar:5.4]
    at com.nimbusds.jose.jwk.JWKSet.parse(JWKSet.java:304) ~[nimbus-jose-jwt-5.4.jar:5.4]
    at com.nimbusds.jose.jwk.source.RemoteJWKSet.updateJWKSetFromURL(RemoteJWKSet.java:145) ~[nimbus-jose-jwt-5.4.jar:5.4]
    ... 64 common frames omitted

它似乎没有重定向到所需的页面,而是Gitlab登录。

【问题讨论】:

    标签: spring spring-boot spring-security oauth-2.0 gitlab


    【解决方案1】:

    这是一个老问题,但我相信这里有一个错误:

    user-info-uri: https://gitlab.com/oauth/userinfo
    

    应该是:

    user-info-uri: https://gitlab.com/api/v4/user
    

    这里:https://docs.gitlab.com/ce/api/oauth2.html

    【讨论】:

    • 还需要调整spring.security.oauth2.client.provider.gitlab.user-name-attribute=username
    【解决方案2】:

    过去两天我一直在为同样的问题苦苦挣扎,终于找到了一个可行的解决方案:

    pom.xml

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    

    application.properties

    spring.security.oauth2.client.provider.gitlab.authorization-uri=https://gitlab.com/oauth/authorize
    spring.security.oauth2.client.provider.gitlab.token-uri=https://gitlab.com/oauth/token
    spring.security.oauth2.client.provider.gitlab.user-info-uri=https://gitlab.com/api/v4/user
    spring.security.oauth2.client.provider.gitlab.user-name-attribute=username
    spring.security.oauth2.client.provider.gitlab.jwk-set-uri=https://gitlab.com/oauth/discovery/keys
    
    spring.security.oauth2.client.registration.gitlab.client-id=YOUR_CLIENT_ID
    spring.security.oauth2.client.registration.gitlab.client-secret=YOUR_SECRET
    spring.security.oauth2.client.registration.gitlab.authorization-grant-type=authorization_code
    spring.security.oauth2.client.registration.gitlab.redirect-uri=http://localhost:8080/login/oauth2/code/gitlab
    spring.security.oauth2.client.registration.gitlab.scope=read_user
    spring.security.oauth2.client.registration.gitlab.client-name=GitLab
    

    Gitlab 应用配置:

    当然记得把localhost:8080改成你的真实应用地址。但是,这对于本地开发来说效果很好。

    【讨论】:

    • 当时我使用Gitlab的时候,我觉得有一个问题是Gitlab默认保护了一些发现配置URL。
    猜你喜欢
    • 2020-04-06
    • 2012-10-22
    • 2013-06-20
    • 1970-01-01
    • 2019-04-06
    • 2022-11-11
    • 2017-09-17
    • 2020-02-11
    • 2019-03-03
    相关资源
    最近更新 更多