当前位置: 首页 > news >正文

获取GitHub的OAuth2的ClientId和ClientSecrets

获取 GitHub OAuth2 登录所需的 client-id 和 client-secret

  1. 登录 GitHub:使用你的 GitHub 账号登录到 GitHub。
  2. 访问开发者设置:点击右上角的头像,选择 Settings,然后在左侧导航栏中选择 Developer settings
  3. 创建新的 OAuth 应用:在 Developer settings 中,选择 OAuth Apps,然后点击 New OAuth App
  4. 填写应用信息:
    Application name:为你的应用取一个名称。
    Homepage URL:应用的主页 URL。
    Authorization callback URL:用户授权后重定向的 URL。这个 URL 必须是你应用中能够处理授权回调的有效 URL。
  5. 注册应用:填写完信息后,点击 Register application
  6. 获取 client-id 和 client-secret:注册成功后,你会看到应用的 Client ID 和 Client Secret。注意,Client Secret 只会显示一次,务必妥善保存

在 Spring Boot 中配置 OAuth2:

  1. 在 pom.xml 中引入如下依赖
 <!-- 能够让用户避免在Web站点特定的登录页上自己输入凭证信息。这样的Web站点提供了一种通过其他网站(如Facebook)登录的方式,用户可能已经在这些其他的网站登录过了。这种类型的认证是基于OAuth2或OpenID Connect(OIDC)的。OAuth2是一个授权规范,例如使用它来保护REST API,但它也可以用来通过第三方网站实现认证功能。OpenID Connect是另一个基于OAuth2的安全规范,用于规范化第三方认证过程中发生的交互。 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId></dependency>
  1. 在application.properties中添加如下配置
# Spring Security内置了针对Facebook、Google、GitHub和Okta的登录方式,但你也可以通过指定一些额外的属性来配置其他客户端。
# 要让我们的应用成为OAuth2或OpenID Connect的客户端,有一些通用的属性需要设置,如下所示:
# 客户端ID和secret是用来标识我们的应用在Facebook中的凭证。你可以在Facebook的开发者网站新建应用来获取客户端ID和secret。scope属性可以用来指定应用的权限范围。
# 所有工作:1.引入oauth2依赖 2.配置客户端id和secret以及scope,这就是所有工作,当访问需要认证的页面时,会自动跳转到facebook登录页面
# 如果通过声明SecurityFilterChain bean来自定义安全配置,那么除了其他的安全配置,还需要启用OAuth2登录。
spring.security.oauth2.client.registration.github.client-id=<client id>
spring.security.oauth2.client.registration.github.client-secret=<client secret>
spring.security.oauth2.client.registration.github.scope=<scope>

在SecurityConfig配置类中通过SecurityFilterChain配置HttpSecurity启用OAuth2

@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {/** HttpSecurity可以配置很多的功能,其中包括:●要求在为某个请求提供服务之前,满足特定的安全条件;●配置自定义的登录页;●使用户能够退出应用;●预防跨站请求伪造。* HttpSecurity最常见的需求就是拦截请求以确保用户具备适当的权限。* */return http.authorizeRequests().antMatchers("/design", "/orders").hasRole("USER")
//                .antMatchers("/design", "/orders").access("hasRole('USER') or hasRole('ADMIN')").antMatchers("/", "/**").permitAll()// 为了替换内置的登录页,我们首先需要告诉Spring Security自定义登录页的路径。这可以通过调用HttpSecurity对象的formLogin()方法来实现,如下所示:.and().formLogin().loginPage("/login")
//                // 声明Spring Security要监听对“/authenticate”的请求来处理登录信息的提交。同时,用户名和密码的字段名应该是user和pwd。
//                .loginProcessingUrl("/authenticate").usernameParameter("user").passwordParameter("pwd")
//                // 如果用户登录成功,就会被重定向到“/design”路径。
//                .defaultSuccessUrl("/design", true)// 如果通过声明SecurityFilterChain bean来自定义安全配置,那么除了其他的安全配置,还需要启用OAuth2登录,如下所示:.and().oauth2Login().and().build();/* 表5.1 用来定义如何保护路径的配置方法
| 方法                        | 功能                                                         |
| -------------------------- | ------------------------------------------------------------ |
| access(String)             | 如果给定的SpEL(代表Spring ExpressionLanguage)表达式计算结果为true,就允许访问 |
| anonymous()                | 允许匿名用户访问                                             |
| authenticated()            | 允许认证过的用户访问                                         |
| denyAll()                  | 无条件拒绝所有访问                                           |
| fullyAuthenticated()       | 如果用户进行了完整认证(而不是通过Rememberme功能认证的),就允许访问 |
| hasAnyAuthority(String...) | 如果用户具备给定权限中的某一个,就允许访问                   |
| hasAnyRole(String...)      | 如果用户具备给定角色中的某一个,就允许访问                   |
| hasAuthority(String)       | 如果用户具备给定权限,就允许访问                             |
| hasIpAddress(String)       | 如果请求来自给定IP,就允许访问                               |
| hasRole(String)            | 如果用户具备给定角色,就允许访问                             |
| not()                      | 对其他访问方法的结果求反                                     |
| permitAll()                | 无条件允许访问                                               |
| rememberMe()               | 如果用户是通过Remember-me功能认证的,就允许访问              |* 我们还可以使用access()方法,通过为其提供SpEL表达式来声明更丰富的安全规则。Spring Security扩展了SpEL,包含多个安全相关的值和函数,如表5.2所示。* 表5.2 Spring Security对Spring表达式语言的扩展
| 安全表达式                                                   | 计算结果                                                     |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| authentication                                               | 用户的认证对象                                               |
| denyAll                                                      | 结果始终为false                                              |
| hasAnyAuthority(String...authorities)                        | 如果用户被授予了给定权限中的任意一个,结果为true             |
| hasAnyRole(String.. roles)                                   | 如果用户具有给定角色中的任意一个,结果为true                 |
| hasAuthority(String authority)                               | 如果用户被授予了给定的权限,结果为true                       |
| hasPermission(Object target, Object permission)              | 如果用户能够访问特定目标对象以获取给定权限,结果为true       |
| hasPermission(Serializable targetId String targetType,Objeotpermission) | 如果用户能够访问targetId和targetType中给定的象以获取给定权限,结果为true |
| hasRole(String role)                                         | 如果用户被授予了给定的角色,结果为true                       |
| hasIpAddress(String ipAddress)                               | 如果请求来自给定IP,结果为true                               |
| isAnonymous()                                                | 如果用户为匿名用户,结果为true                               |
| isAuthenticated()                                            | 如果用户进行了认证,结果为true                               |
| isFullyAuthenticated()                                       | 如果用户进行了完整认证(而不是通过Renember-me功能认证的),结果为true |
| isRememberMe()                                               | 如果用户是通过Renemberme功能认证的,结果为true               |
| permitAll                                                    | 结果始终为true                                               |
| principal                                                    | 用户的principal对象
*/}

相关文章:

获取GitHub的OAuth2的ClientId和ClientSecrets

获取 GitHub OAuth2 登录所需的 client-id 和 client-secret 登录 GitHub&#xff1a;使用你的 GitHub 账号登录到 GitHub。访问开发者设置&#xff1a;点击右上角的头像&#xff0c;选择 Settings&#xff0c;然后在左侧导航栏中选择 Developer settings。创建新的 OAuth 应用…...

self-attention部分代码注释

多头注意力机制&#xff08;Multi-Head Attention, MHA&#xff09;&#xff0c;是 Transformer 模型的核心组件之一。以下是对代码的逐行解析和详细说明&#xff1a; attention-is-all-you-need-pytorch-master\transformer\SubLayers.py class MultiHeadAttention(nn.Mo…...

idea里的插件spring boot helper 如何使用,有哪些强大的功能,该如何去习惯性的运用这些功能

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

常用的配置文件格式对比(ini,toml,yaml,json,env,settings.py)及应用程序修改自身配置并保留注释

代码与环境配置解耦 git分支的代码应做到“环境无关”&#xff1a;代码本身不硬编码任何环境特定的配置&#xff08;如数据库连接、密钥、API地址&#xff09;&#xff0c;而是通过外部机制动态注入。 配置与代码分离&#xff1a;将配置信息存储在代码库之外&#xff08;如环…...

Java IO 和 NIO 的基本概念和 API

一、 Java IO (Blocking IO) 基本概念&#xff1a; Java IO 是 Java 平台提供的用于进行输入和输出操作的 API。Java IO 基于 流 (Stream) 的模型&#xff0c;数据像水流一样从一个地方流向另一个地方。Java IO 主要是 阻塞式 I/O (Blocking I/O)&#xff0c;即线程在执行 I/O …...

小智AI桌宠机器狗

本文主要介绍如何利用开源小智AI制作桌宠机器狗 1 源码下载 首先下载小智源码,下载地址, 下载源码后,使用vsCode打开,需要在vscode上安装esp-idf,安装方式请自己解决 2 源码修改 2.1添加机器狗控制代码 在目录main/iot/things下添加dog.cc文件,内容如下; #include…...

MySQL 入门“鸡”础

一、Win10 与Ubuntu安装 以下是一篇针对 Ubuntu 安装 MySQL 的过程中写的示例&#xff1a; --- # Ubuntu 安装 MySQL 详细指南 在本教程中&#xff0c;我们将向您展示如何在 Ubuntu 上安装 MySQL&#xff0c;并完成基本的安全配置。以下是具体步骤&#xff1a; # 1. 安装 …...

Redis 中有序集合(Sorted Set)的使用方法

文章目录 前言1. 有序集合的特点2. 常用命令2.1 添加元素&#xff08;ZADD&#xff09;2.2 获取元素分数&#xff08;ZSCORE&#xff09;2.3 获取元素排名&#xff08;ZRANK / ZREVRANK&#xff09;2.4 获取范围内的元素&#xff08;ZRANGE / ZREVRANGE&#xff09;2.5 获取分数…...

WIn32 笔记:本专栏课件

专栏导航 上一篇&#xff1a;在VS2019里面&#xff0c;调整代码字体大小 回到目录 下一篇&#xff1a;无 本节前言 在之前的讲解里面&#xff0c;我讲解了 Visual Studio 软件的一些个基础操作步骤。从本节开始&#xff0c;我们进入预备章。 本节内容&#xff0c;属于是 …...

Unity git 获取当前修改或者新增的文件列表

直接上代码 using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Text.RegularExpressions; using UnityEngine;public class GitFileStatusCheckerTools : MonoBehaviour {// 获取Git变更文件列表&#xff08;新增/修…...

结构型模式 - 桥接模式 (Bridge)

结构型模式 - 桥接模式 (Bridge) 桥接模式是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。 // 软件接口&#xff0c;作为实现部分 interface Software {void run(); }// 游戏软件类&#xff0c;实现 Software 接口 class Game…...

如何让传统制造企业从0到1实现数字化突破?

随着全球制造业不断向智能化、数字化转型&#xff0c;传统制造企业面临着前所未有的机遇与挑战。数字化转型不仅是技术的革新&#xff0c;更是管理、文化、业务流程等全方位的变革。从零开始&#xff0c;如何带领一家传统制造企业走向数字化突破&#xff0c;是许多企业领导者面…...

【Elasticsearch】script_fields 和 runtime_fields的区别

script_fields和runtime_fields都是 Elasticsearch 中用于动态计算字段值的功能&#xff0c;但它们在实现方式、应用场景和性能表现上存在显著区别。以下是两者的详细对比&#xff1a; 1.定义和应用场景 • script_fields&#xff1a; • 定义&#xff1a;通过 Painless 脚本…...

城电科技|会追日的智能花,光伏太阳花开启绿色能源新篇章

当艺术与科技相遇&#xff0c;会碰撞出怎样的火花&#xff1f;城电科技推出的光伏太阳花&#xff0c;以其独特的设计与智能化的功能&#xff0c;给出了答案。这款产品不仅具备太阳能发电的实用功能&#xff0c;更是一件充满科技属性的艺术性光伏产品&#xff0c;吸引了广泛关注…...

【笔记ing】C语言补充、组成原理数据表示与汇编实战、操作系统文件实战(高级阶段)

【第19节 C语言语法进阶】 【19.1 条件运算符与逗号运算符】 1 条件运算符 条件运算符是C语言中唯一的一种三亩运算符。三目运算符代表有三个操作数&#xff1b;双目运算符代表有两个操作数&#xff0c;如逻辑运算符就是双目运算符&#xff1b;弹幕运算符代表有一个操作数&a…...

快节奏生活

在当今快节奏的商务环境中&#xff0c;效率成为了决定企业竞争力的关键因素之一。亿可达软件连接平台&#xff0c;以其独特的功能和优势&#xff0c;为职场人士带来了前所未有的便捷与高效&#xff0c;成为了众多用户心中的“宝藏”工具。 1、亿可达&#xff1a;自动化流程的搭…...

【音视频】音视频录制、播放原理

一、音视频录制原理 通常&#xff0c;音视频录制的步骤如下图所示&#xff1a; 我们分别从音频和视频开始采样&#xff0c;通过麦克风和摄像头来接受我们的音频信息和图像信息&#xff0c;这通常是同时进行的&#xff0c;不过&#xff0c;通常视频的采集会比音频的采集慢&…...

前端Sass面试题及参考答案

目录 什么是 Sass? Sass 和 CSS 的主要区别是什么? Sass 中如何处理列表? Sass 中如何处理映射(map)? Sass 中如何使用函数? Sass 中如何使用内置函数? Sass 中如何设置默认值? Sass 中的 @function 和 @mixin 有什么区别? Sass 中如何实现模块化? Sass 中…...

Web自动化之Selenium控制已经打开的浏览器(Chrome,Edge)

在使用selenium进行web自动化或爬虫的时候,经常会面临登录的情况,对于这种情况,我们可以利用Selenium控制已经打开的浏览器&#xff0c;从而避免每次都需要重新打开浏览器并进行登录的繁琐步骤。 目录 说明 启动浏览器 注意 --user-data-dir说明 代码设定 代码 改进代…...

AF3 unify_template_features 函数解读

AlphaFold3 data_pipeline 模块的 unify_template_features 函数用于将多条链的模板特征整合为一个统一的 FeatureDict,以适应对多链复合物的处理。每条链的模板特征经过索引偏移处理后,拼接为一个完整的模板特征矩阵。 该方法的核心在于: 序列对齐:根据每条链的长度,将模…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...