Spring Security OAuth 实现 GitHub 快捷登录

简介: Spring Security 5中集成了OAuth的客户端模块,该模块包含以下三个子模块

前言

Spring Security 5中集成了OAuth的客户端模块,该模块包含以下三个子模块:

  1. spring-security-oauth2-core

OAuth授权框架和OIDC的核心数据结构及接口,被Client、 Resource Server和Authorization Server所依赖。

  1. spring-security-oauth2-jose

支持JOSE协议组,具体包含:JSON Web Token(JWT)、JSON Web Signature(JWS)、JSON Web Encryption(JWE)、JSON Web Key(JWK)。

  1. spring-security-oauth2-client

Spring Security支持OAuth和OIDC的客户端功能实现包。

实现GitHub快捷登录

源代码地址: https://github.com/jujunchen/21Study

新建工程

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

<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应用

在GitHub上注册一个OAuth应用

地址是:https://github.com/settings/applications/new

注册界面如下:

image.png

  • Application name:必填,应用名称
  • Homepage URL:必填,主页的URL地址,本地开发,我们将其设置为http://localhost:8080
  • Application description:非必填,应用描述
  • Authorization callback URL:必填,OAuth认证的重定向地址,本地开发环境设置为http://localhost:8080/login/oauth2/code/github

点击 Register application按钮注册,注册完成得到clientId和clientSecret

配置application.yml

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

spring:
  security:
    oauth2:
      client:
        registration:
          github:
            client-id: github-client-id
            client-secret: github-client-secret

其中:
(1)spring.security.oauth2.client.registration是OAuth客户端所有属性的基础前缀。

(2)registration下面的github是ClientRegistration的唯一ID。

Spring Security OAuth 默认的重定向模板是{baseUrl}/login/oauth2/code/{registrationId},registrationId
是ClientRegistration的唯一ID,通常以接入的OAuth服务提供商的简称来命名即可,所以此处设置为 github。

github-client-id和github-client-secret需要替换为前面在GitHub上注册得到的clientId和clientSecret。

新建Controller

@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的登录页

image.png

  1. 点击Authorize xxx(授权)按钮后,回调到http://localhost:8080/login/oauth2/code/github?code=dc3a0c2d3a77a8ade7dc&state=Pq69SdJxwxeV-nY4aLkX-DGu31qWNFl-5EMRml1sRdM%3D地址,该地址就为前面配置的OAuth认证的重定向地址,code 和 state为 github 自动拼接。最终浏览器显示"Hello,xxx"

由于github在国内经常超时,后面将介绍如何使用Gitee进行集成登录。

相关文章
|
1月前
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
1月前
|
安全 Java 数据库
实现基于Spring Security的权限管理系统
实现基于Spring Security的权限管理系统
|
1月前
|
安全 Java 数据安全/隐私保护
解析Spring Security中的权限控制策略
解析Spring Security中的权限控制策略
|
2月前
|
JSON 安全 Java
Spring Security 6.x 微信公众平台OAuth2授权实战
上一篇介绍了OAuth2协议的基本原理,以及Spring Security框架中自带的OAuth2客户端GitHub的实现细节,本篇以微信公众号网页授权登录为目的,介绍如何在原框架基础上定制开发OAuth2客户端。
101 4
Spring Security 6.x 微信公众平台OAuth2授权实战
|
12天前
|
Windows
github无法访问?vscode 无法使用github登录同步? 改 hosts 吧
github无法访问?vscode 无法使用github登录同步? 改 hosts 吧
|
2月前
|
存储 安全 Java
Spring Security 6.x OAuth2登录认证源码分析
上一篇介绍了Spring Security框架中身份认证的架构设计,本篇就OAuth2客户端登录认证的实现源码做一些分析。
102 2
Spring Security 6.x OAuth2登录认证源码分析
|
2月前
|
安全 Java 数据安全/隐私保护
Spring Security 6.x 一文快速搞懂配置原理
本文主要对整个Spring Security配置过程做一定的剖析,希望可以对学习Spring Sercurity框架的同学所有帮助。
126 5
Spring Security 6.x 一文快速搞懂配置原理
|
2月前
|
安全 Java API
Spring Security 6.x 图解身份认证的架构设计
【6月更文挑战第1天】本文主要介绍了Spring Security在身份认证方面的架构设计,以及主要业务流程,及核心代码的实现
41 1
Spring Security 6.x 图解身份认证的架构设计
|
1月前
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
1月前
|
安全 Java 数据安全/隐私保护
使用Java和Spring Security实现身份验证与授权
使用Java和Spring Security实现身份验证与授权