OAuth2.0简介

简介: 公司使用这个东西,所以简单整理下做一个使用级别的梳理。官网:https://oauth.net/2/ ,如果英语不好又是第一次了解这个东西可以先用几分钟看看这个网友对于官网的中文直译:https://www.jianshu.com/p/bc2153b4d657

OAuth是什么

“Auth”表示 授权“O” Open 简称,表示 开放,表示 开放授权OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资

源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

OAuth2.0是什么

OAuth2.0OAuth协议的下一版本,但不向后兼容OAuth 1.0OAuth 2.0关注客户端开发者的简易 性,同时为Web应用,桌面应用和手机,和起居室设备提供专⻔的认证流程。201210月,OAuth 2.0协议正式发布为RFC 6749

OAuth2.0OAuth1.0的区别

首先一点相对于1.0Request_TokenAuthorization_CodeAuthorization_Code再换Access_Token的授权模式,2.0授权码模式提供了一种更简洁给力的授权码方式:Authorization_Code直接换Access_Token模式。


OAuth2.0里的Access_Token1.0里的不同。1.0里包含3个字段: UserID, AccessToken, AccessTokenSecret2.0里也包含3个字段: AccessTokenExpiresIn (AccessToken的过期时间,按秒 计,很短,默认可能是1个小时)


RefreshToken (AccessToken
过期时,用来获取新的AccessToken,具体做法是当使用AccessToken时 收到类似TokenInvalid或者TokenExpired的错误时,调用oauth2/accesstoken接口传递RefreshToken以获取新的AccessToken)


OAuth协议在生活中的应用场景

当有一天我正在公司工作时,自如管家突然给我通电话说,有新家具到了需要放到我的公寓里,询问我

是否可以申请一个临时密码,进入我的公寓摆放家具,我核实她的声音和预留的电话号码没有问题之

后,允许她申请临时密码进入我的公寓摆放家具。

---> 资源拥有者

自如平台--->授权服务

自如管家 ----> 第三方平台

我的公寓 ------>资源服务

临时密码 ----> access_token

OAuth2.0在互联网中的应用场景

1.使用微信登录豆瓣

image.png

2.微信扫码授权

image.png

3.和手机号绑定image.png

4.授权成功,获取到用户的微信昵称和微信头像

image.png


OAuth2.0的四种授权模式

1.隐式许可授权流程

适用场景:适用于没有后端的纯前端web应用,因此token令牌会存放在前端,由于没有授权码这个中间 步骤所以称之为隐式许可

整体流程如下图

image.png

1) 第三方网站前端提供一个链接

https://qq.com/oauth/authorize?
  response_type=token&
  client_id=CLIENT_ID&
  redirect_uri=https://third.com/callback&
  scope=read

2) 授权服务校验,校验通过后会回调到https://third.com/callback这个回调地址,并拼接token参数

https://third.com/callback#token=ACCESS_TOKEN

2.客户端凭据许可

适用场景:适用于没有明确的资源拥有者,第三方软件后端直接使用注册的app_idapp_secret来获取访问令牌

1)第三方后端服务发起请求

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

2) 授权服务校验后返回access_token

整体流程如下图:

image.png

3.资源拥有者凭据许可

适用场景:资源凭据就是用户的用户名和密码,该模式会直接暴露用户名和密码给接入服务,所以适用于接入服务和授权服务一样是同一个平台出品的场景。

1.第三方服务携带一下参数向授权服务发起请求,获取accessToken

image.png

整体流程如下图:

image.png


4.授权码模式

整体流程如下图:

image.png

1.用户访问第三方网站,第三方网站拼接上之前在开放平台注册的app_idredirect_uri参数并设置response_type参数的值为code请求授权服务。重定向url携带参数:

image.png

2.授权服务根据第三方平台提供的appidredirect_url对第三方平台进行合法性校验,生成对应的授权 ⻚面。

3.用户授权,授权服务队用户进行认证,认证通过,授权服务重定向到第三方平台提供的回调⻚面并且 携带code参数

image.png

4.第三方平台前端发起请求,后端携带上app_idapp_secret以及code等参数请求授权服务生成accessToken

请求参数如下:

image.png

5.授权服务返回参数到第三方后台,第三方后台以session方式存储access_token等信息

image.png


OAuth2.0使用不当会导致哪些安全问题

1.互联网中常⻅的安全漏洞CSRFXSS、水平越权

2.OAuth2.0专属的安全⻛险:重定向url被篡改、授权码失窃

1.跨站请求伪造(CSRF)

CSRF简单来说就是恶意软件已完成用户身份认证的网站发起请求,并执行有害操作OAuth2.0CSRF攻击示例:image.png

跨站请求伪造解决方案:

1.验证HTTP Referer字段

2.state参数

2.跨站脚本攻击(XSS攻击)

XSS简单来说就是将恶意脚本注入到请求中,当受保护资源把输入内容回显到用户界面,浏览器解

析后用户触发这些代码遭到攻击

对于受保护资源可以做一些防御,比如对非法信息做转义过滤,比如包含、、等标签的信息 简单的XSS攻击示例

3.水平越权

水平越权是指,在请求受保护资源服务数据的时候,服务端应用程序未校验这条数据是否归属于当前授 权的请求用户,导致A用户获取到B用户的数据。

image.png

4.授权码失窃

授权码失窃后导致的安全问题简单示例:

image.png




5.重定向URl被篡改

简单实例图:

image.png

OAuth2.0 的架构参考案例

以下是携程基础架构部总监杨波给出的OAuth2.0可落地架构 第三方web应用+授权码许可模式:

image.png

image.png



  • IDP(identity provider)服务:主要负责OAuth2.0授权,令牌的颁发和管理,通过login服务进行用 户认证。IDP的技术选型可以是当前主流的Spring Security OAuth
  • 领域服务:领域服务在整个微服务架构的底层,这些服务包含业务逻辑,通常有自己独立的数据库 存在。领域服务是独立的开发、测试和发布单位,领域服务是无状态的

参考文档

阮一峰 - OAuth 2.0 的一个简单解释

阮一峰 - OAuth 2.0 的四种方式

极客时间OAuth2.0实战课

腾讯开放平台OAuth2.0简介

阿里云OAuth2.0应用概述


目录
相关文章
|
4天前
|
数据安全/隐私保护
OAuth2.0实战案例
OAuth2.0实战案例
11 0
OAuth2.0实战案例
|
5月前
|
JSON 安全 Java
Spring Security 6.x 微信公众平台OAuth2授权实战
上一篇介绍了OAuth2协议的基本原理,以及Spring Security框架中自带的OAuth2客户端GitHub的实现细节,本篇以微信公众号网页授权登录为目的,介绍如何在原框架基础上定制开发OAuth2客户端。
199 4
Spring Security 6.x 微信公众平台OAuth2授权实战
|
5月前
|
存储 安全 Java
Spring Security 6.x OAuth2登录认证源码分析
上一篇介绍了Spring Security框架中身份认证的架构设计,本篇就OAuth2客户端登录认证的实现源码做一些分析。
224 2
Spring Security 6.x OAuth2登录认证源码分析
|
安全 前端开发 小程序
OAuth2基础知识
OAuth2基础知识
68 0
|
Java Spring
五分钟带你玩转oauth2(二十)spring security+oauth2通过EnableOAuth2Sso实现单点登录
五分钟带你玩转oauth2(二十)spring security+oauth2通过EnableOAuth2Sso实现单点登录
251 0
五分钟带你玩转oauth2(二十)spring security+oauth2通过EnableOAuth2Sso实现单点登录
|
SpringCloudAlibaba 安全 前端开发
SpringCloud Alibaba实战二十七 - Oauth2认证服务器自定义异常
今天内容主要是解决一位粉丝提的问题:在使用 Spring Security OAuth2 时如何自定义认证服务器返回异常。
869 0
SpringCloud Alibaba实战二十七 - Oauth2认证服务器自定义异常
|
SpringCloudAlibaba 前端开发 安全
SpringCloud Alibaba实战二十六 - Oauth2认证服务器自定义异常
SpringCloud Alibaba实战二十六 - Oauth2认证服务器自定义异常
388 0
Spring-security-oauth2 源码分析 登陆流程 /oauth/token (一)
Spring-security-oauth2 源码分析 登陆流程 /oauth/token (一)
Spring-security-oauth2 源码分析 登陆流程 /oauth/token (一)
|
存储 安全 Java
OAuth2.0介绍|学习笔记
快速学习 OAuth2.0介绍
OAuth2.0介绍|学习笔记
|
存储 安全 Java
OAuth2在项目中使用完成的功能说明|学习笔记
快速学习OAuth2在项目中使用完成的功能说明
OAuth2在项目中使用完成的功能说明|学习笔记
下一篇
无影云桌面