【OAuth2】OAuth2概述及使用GitHub登录第三方网站

这篇具有很好参考价值的文章主要介绍了【OAuth2】OAuth2概述及使用GitHub登录第三方网站。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【OAuth2】OAuth2概述及使用GitHub登录第三方网站

0. 导言

我们在浏览器上可以访问成百上千个网站,使用每个网站的服务一般都要先注册账号,那么我们为了更好地记忆,一般都会在多个网站使用相同的账号和密码进行注册。那么问题就来了,如果在你注册的网站中有某些个网站的系统设计不够严谨和安全,数据库的用户信息使用明文存储,那么一旦这个网站遭到攻击或者是数据泄露,那么一些不怀好意的人就可能通过使用这些泄露的数据“撞库”,刚好就登录了你使用相同账号密码注册的其他网站。那么你的权益就有可能会受到损害。

由此行内大佬们便提出了 OAuth

1. OAuth2 简介

OAuth 是一个开放的非常重要的认证标准/协议,允许用户授权第三方应用访问其存储在其他网站上资源,而无需将用户名密码提供给第三方网站的开放标准/协议。OAuth2 是 OAuth 的最新版本,同时也是被广泛应用的一个版本。我们在网站上常见的QQ登录,微信扫码登录,GitHub 授权登录就是基于 OAuth2.0 实现的。

官方文档:点击跳转


2. OAuth2 认证授权总体流程

整体认证授权流程如下:

github oauth2,工具,github,web安全,spring boot,spring

从这张图中我们可以看出,整个 OAuth2 的认证授权流程中有4个不同角色

  1. Client:客户端,也就是第三方网站(相对于认证网站来说)。
  2. Resource Owner:资源拥有者,也就是“我”。
  3. Authorization Server:认证服务器或者说授权服务器。
  4. Resource Server:资源服务器。

3. OAuth2 标准接口

  • /oauth/authorize:授权端点

  • /oauth/token:获取令牌端点

  • /oauth/confirm_access:用户确认授权提交端点

  • /oauth/error:授权服务错误信息端点

  • /oauth/check_token:用于资源服务访问的令牌解析端点

  • /oauth/token_key:提供公有密匙的端点,如果使用JWT令牌的话


4. OAuth2 四种授权模式

4.1 授权码模式

授权码模式(Authorization Code):这是最常用的授权模式。在模式下,用户通过将重定向到授权服务器来进行身份验证,并获一个授权码。然后,应程序使用授权码与授权服务器进行交互,以获取访问牌和刷新令牌。访问令牌用于问受保护的资源,而刷新令牌用于获取新的访问令牌。微信扫码登录就是典型的授权码模式。

授权码模式的授权流程如下图所示:

github oauth2,工具,github,web安全,spring boot,spring

具体流程如下:

  • (A)用户访问第三方应用,第三方应用通过浏览器导向认证服务器。

  • (B)用户选择是否给予客户端授权。

  • (C)假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。

  • (D)客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。

  • (E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。

核心参数(假设第三方网站的地址为:wx.com):

https://wx.com/oauth/authorize?response_type=token&client_id=CLIENT_ID&redirect_uri=http://www.baidu.com&scope=read
字段 描述
client_id 授权服务器注册应用后的唯一标识
response_type 必须 固定值 在授权码中必须为 token
redirect_uri 必须 通过客户端注册的重定向URL
scope 必须 令牌可以访问资源权限
state 可选 存在原样返回客户端 用来防止 CSRF跨站攻击

申请令牌的请求示例(地址栏中的client表示client_id,secret表示密钥值):

github oauth2,工具,github,web安全,spring boot,spring

刷新令牌请求示例:

github oauth2,工具,github,web安全,spring boot,spring


4.2 简化模式

简化模式(Implicit Grant):简化模式不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。其具体的授权流程如图所示

github oauth2,工具,github,web安全,spring boot,spring

具体步骤如下:

  • (A)第三方应用将用户导向认证服务器。
  • (B)用户决定是否给于客户端授权。
  • (C)假设用户给予授权,认证服务器将用户导向客户端指定的"重定向URI",并在URI的Hash部分包含了访问令牌。#token
  • (D)浏览器向资源服务器发出请求,其中不包括上一步收到的Hash值。
  • (E)资源服务器返回一个网页,其中包含的代码可以获取Hash值中的令牌。
  • (F)浏览器执行上一步获得的脚本,提取出令牌。
  • (G)浏览器将令牌发给客户端。

核心参数:

https://wx.com/oauth/authorize?response_type=token&client_id=CLIENT_ID&redirect_uri=http://www.baidu.com&scope=read
字段 描述
client_id 授权服务器注册应用后的唯一标识
response_type 必须 固定值 在授权码中必须为 token
redirect_uri 必须 通过客户端注册的重定向URL
scope 必须 令牌可以访问资源权限
state 可选 存在原样返回客户端 用来防止 CSRF跨站攻击

4.3 密码模式

**密码模式(Resource Owner Password Credentials Grant)**中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。这通常用在用户对客户端高度信任的情况下,比如客户端是操作系统的一部分,或者由一个相同公司出品。而认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式。

授权流程图如下所示:

github oauth2,工具,github,web安全,spring boot,spring

具体步骤如下:

  • (A)用户向客户端提供用户名和密码。

  • (B)客户端将用户名和密码发给认证服务器,向后者请求令牌。

  • (C)认证服务器确认无误后,向客户端提供访问令牌。

核心参数:

https://wx.com/token?grant_type=password&username=USERNAME&password=PASSWORD&client_id=CLIENT_ID

申请令牌的请求示例(地址栏中的client表示client_id,secret表示密钥值):

github oauth2,工具,github,web安全,spring boot,spring

刷新令牌的请求示例:


4.4 客户端模式

**客户端模式(Client Credentials Grant)**指客户端以自己的名义,而不是以用户的名义,向"服务提供商"进行认证。严格地说,客户端模式并不属于OAuth框架所要解决的问题。在这种模式中,用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务,其实不存在授权问题。

github oauth2,工具,github,web安全,spring boot,spring

具体步骤如下:

  • (A)客户端向认证服务器进行身份认证,并要求一个访问令牌。

  • (B)认证服务器确认无误后,向客户端提供访问令牌。

https://wx.com/token?grant_type=client_credentials&client_id=CLIENT_ID&client_secret=CLIENT_SECRET

申请令牌的请求示例(地址栏中的client表示client_id,secret表示密钥值):

github oauth2,工具,github,web安全,spring boot,spring


5. GitHub授权登录

GitHub 授权登录流程:

(1)打开 GitHub 网站,在头部导航栏点击头像,再点击 Settings

(2)找到 Developer settings

github oauth2,工具,github,web安全,spring boot,spring

(3)先点击左侧 OAuth Apps ,再点击 New OAuth App

github oauth2,工具,github,web安全,spring boot,spring

(4)输入信息,点击 Register application

github oauth2,工具,github,web安全,spring boot,spring

(5)注册成功,点击生成密钥

github oauth2,工具,github,web安全,spring boot,spring

(6)保存好密钥,之后不会完整显示了

github oauth2,工具,github,web安全,spring boot,spring

(7)创建一个springboot项目

依赖如下:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <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>

yml配置文件如下所示:

spring:
  security:
    oauth2:
      client:
        registration:
          github:
            client-id: 填自己的
            client-secret: 填自己的
            redirect-uri: http://localhost:8080/login/oauth2/code/github

创建一个配置类(这是新版本SpringSecurity的配置写法,废弃了WebSecurityConfigurerAdapter):

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .oauth2Login();//使用 oauth2 认证
        // ...
        return http.build();
    }

}

再创建一个控制器类:

@RestController
public class HelloController {

    @GetMapping("/hello")
    public DefaultOAuth2User hello(){
        System.out.println("hello ");
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        return (DefaultOAuth2User) authentication.getPrincipal();
    }
}

启动项目,在浏览器中访问“http://localhost:8080”,跳转到github授权端点。

github oauth2,工具,github,web安全,spring boot,spring

点击授权点击之后会跳转到 “localhost:8080”,这时已经授权成功。

我们访问 “http://localhost:8080/hello” 接口,发现出现了github的个人信息,授权成功。

github oauth2,工具,github,web安全,spring boot,spring文章来源地址https://www.toymoban.com/news/detail-803947.html

到了这里,关于【OAuth2】OAuth2概述及使用GitHub登录第三方网站的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OAuth 2.0 协议介绍【实现 GitHub 第三方登录】

    OAuth(是 Open Authorization 开放授权的缩写),在全世界得到广泛应用,目前的版本是2.0版。 本文会对OAuth 2.0的设计思路和运行流程,做一个简明通俗的解释,主要参考材料为RFC 6749。 OAuth 2.0 是一个开放标准,用于授权用户访问另一个应用程序的资源,而无需将用户的凭据(比如

    2024年02月20日
    浏览(67)
  • 【深入浅出 Spring Security(十二)】使用第三方(Github)授权登录

    (Github授权登录的具体操作在目录第三“章”) 下面是《深入浅出Spring Security》书中的一段概述: OAuth 是一个开放标准(现在所说的 OAuth 一般都是指 OAuth2,即 2.0 版本),可以理解为是一种协议,该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头

    2024年02月10日
    浏览(60)
  • 使用开源项目JustAuth完成第三方登录

    JustAuth项目源码地址:https://github.com/justauth/JustAuth JustAuth文档地址:https://justauth.wiki/guide/quickstart/oauth/ 此demo的项目地址:xfeng520/JustAuthDemo (gitee.com) 开发者 指使用 JustAuth 的开发者 第三方 指开发者对接的第三方网站,比如:QQ平台、微信平台、微博平台 用户 指最终服务的真实

    2023年04月22日
    浏览(84)
  • SpringBoot3.0 + SpringSecurity6.0 +OAuth2 使用Github作为授权登录

    1.1 OAuth是什么 开放授权(OAuth)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。 OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供

    2024年02月11日
    浏览(46)
  • 前端使用firebase配置第三方登录介绍(谷歌登录,facebook登录等)

    点此处去 firebase 官网 点此处去 web端的谷歌登录文档 点此处去 facebook开发者官网链接 首先注册一个账号登录firebase(可以使用谷歌账号登录) 然后创建项目(走默认配置就行了) 添加应用(走默认配置),如图所示,本文介绍web应用。 应用添加完毕后走项目设置-如下图(

    2024年04月13日
    浏览(47)
  • 使用第三方打码平台图鉴识别滑动验证码模拟登录

    图鉴网页地址: http://www.ttshitu.com/ 登录后充值一个提分 把这个python脚本复制保存到一个python文件中去 识别流程 首先你要先确定验证码的类型,然后选择类型对应的编号 页面分析 我们就用邮箱登录为例 我们点击登录后会有一个滑动验证码的验证,这就是我们主要的问题,下面我

    2024年02月06日
    浏览(54)
  • pc端web网站使用第三方微信登录流程(web、js)

    网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 网站接入准备工作 微信开放平台注册开发者账号,点击查看操作指引; 微信开放平台-管理中心-创建网站应用并通过审核; 通过审核后可以获得相应的AppID和AppSecret; 应用申请微信登录且通过审核后,

    2024年03月25日
    浏览(49)
  • ios swift5 “Sign in with Apple“(使用苹果登录)怎样接入(第三方登录)集成AppleID登录

    1.1 如果你新建app id,记得在新建的时候就选中Sign in with Apple功能 1.2 如果app已经上线了,后面再需要加苹果登录的功能,也可以在app id的配置中加这个功能,只是勾选Sign in with Apple点击Save后,profilex需要重新生成 iOS 苹果登录(第三方登录) - csdn 集成AppleID登录 - 简书 要在你的

    2024年04月09日
    浏览(66)
  • (待完善)2023-selenium 实现知乎自动登录(第三方登录/使用cookie自动登录)+指定用户的信息相关搜集(2023.3)

    叠甲:本文写作目的仅为本人学习参考、实现功能为课程实验要求、本文写作过程处于作者对于爬虫技术学习的过程,部分代码编写时水平还不够,出现的错误比较多、部分变量名字又臭又长,水平有限,请各位给我的作业汇报留条活路[拜托],请不要卷我,如果发现有什么

    2023年04月10日
    浏览(48)
  • Gitee第三方登录

    写这篇文章时,参考了一位大佬的文章,算是把大佬文章里一些不详细的部分补充完整了,但是核心的代码没有什么改动,只是抛弃掉了那个重定向的工具类,以下是大佬文章的链接:http://t.csdn.cn/0L7T4 1、登录gitee 官网:https://gitee.com/ 2、注册或登录账号 3、进入 设置》第三

    2024年02月12日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包