前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Security OAuth实现Gitee快捷登录

Spring Security OAuth实现Gitee快捷登录

作者头像
阿提说说
发布2022-12-02 17:19:58
1K0
发布2022-12-02 17:19:58
举报
文章被收录于专栏:Java技术进阶

活动地址:CSDN21天学习挑战赛

前言

前面已经介绍了【Spring Security OAuth实现GitHub登录】,但由于GitHub会因网络原因,无法范围,因此该文将介绍如何使用国内的Gitee进行集成登录。

实现Gitee快捷登录

源代码地址:https://github.com/jujunchen/21Study Gitee 文档地址:https://gitee.com/api/v5/oauth_doc#/

新建工程

新创建一个Spring Boot 工程,pom依赖如下

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <!--单元测试-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>

</dependencies>

注意: 必须引入spring-boot-starter-oauth2-client依赖

注册OAuth应用

进入Gitee->设置->数据管理->第三方应用

注册界面如下:

填写内容同GitHub

  • 应用名称:必填,
  • 应用主页:必填,主页的URL地址,本地开发,我们将其设置为http://localhost:8080
  • 应用描述:非必填,应用描述
  • 应用回调地址:必填,OAuth认证的重定向地址,本地开发环境设置为http://localhost:8080/login/oauth2/code/github
  • 权限:这里使用默认权限

创建应用后,生成Client ID和Client Secret

配置application.yml

接下来在配置文件中增加对于的配置

代码语言:javascript
复制
spring:
  security:
    oauth2:
      client:
        registration:
          gitee:
            client-id: gitee-client-id
            client-secret: gitee-client-secret
            authorization-grant-type: authorization_code
            redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
            client-name: Gitee
          github:
            client-id: b4713d47174917b34c28
            client-secret: 898389369c2e9f3d1d0ff4543ba1d9b45adfd093
        provider:
          gitee:
            authorization-uri: https://gitee.com/oauth/authorize
            token-uri: https://gitee.com/oauth/token
            user-info-uri: https://gitee.com/api/v5/user
            user-name-attribute: name

其中: (1)client_id、client-secret替换为Gitee获取的数据

(2)authorization-grant-type:授权模式使用授权码模式

(3)redirect-uri:回调地址,填写的与Gitee上申请的一致

(4)client-name:客户端名称,可以在登录选择页面上显示

Gitee的OAuth登录需要自定义provider,Spring Security OAuth提供了配置的方式来实现。

(5)authorization-uri:授权服务器地址

(6)token-uri:授权服务器获取token地址

(7)user-info-uri:授权服务器获取用户信息的地址

(8)user-name-attribute:用户信息中的用户名属性

新建Controller

代码语言:javascript
复制
@RestController
public class HelloController {
    
    @GetMapping("/hello")
    public String hello(Principal principal) {
        return "Hello," + principal.getName();
    }
}

principal对象由Spring框架自动注入,表示当前登录的用户。

演示

  1. 启动Spring Boot应用
  2. 访问http://localhost:8080/hello的时候,会跳转到默认的登录页,现在有两个登录选项GitHub和Gitee
  1. 点击Gitee,将跳转到Gitee的授权登录页,页面列出了可以访问的数据权限
  1. 同意授权后,将跳转到http://localhost:8080/login/oauth2/code/gitee地址,客户端创建认证对象后,再被重定向到http://localhost:8080/hello,页面会显示"Hello,xxx"

通过Configuration覆盖自动配置

Spring Security OAuth 使用OAuth2ClientAutoConfiguration 来完成自动配置,也可以通过如下步骤覆盖自动配置:

  • 注册一个 ClientRegistrationRepository Bean
  • 注册一个SecurityFilterChain Bean
代码语言:javascript
复制
@Configuration
public class OAuth2LoginConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .authorizeHttpRequests(authorize -> authorize
                        .anyRequest().authenticated()
                )
                .oauth2Login(withDefaults());
        return http.build();
    }

    @Bean
    public ClientRegistrationRepository clientRegistrationRepository() {
        return new InMemoryClientRegistrationRepository(this.giteeClientRegistration());
    }

    private ClientRegistration giteeClientRegistration() {
        return ClientRegistration.withRegistrationId("gitee")
                .clientId("gitee-client-id")
                .clientSecret("gitee-client-secret")
                .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
                .redirectUri("{baseUrl}/login/oauth2/code/{registrationId}")
                .authorizationUri("https://gitee.com/oauth/authorize")
                .tokenUri("https://gitee.com/oauth/token")
                .userInfoUri("https://gitee.com/api/v5/user")
                .userNameAttributeName("name")
                .clientName("Gitee")
                .build();
    }
}

效果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 实现Gitee快捷登录
    • 新建工程
      • 注册OAuth应用
        • 配置application.yml
          • 新建Controller
            • 演示
            • 通过Configuration覆盖自动配置
            相关产品与服务
            访问管理
            访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档