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


目录
相关文章
|
5月前
|
安全 前端开发 小程序
OAuth2基础知识
OAuth2基础知识
35 0
|
8月前
|
安全 Java 数据安全/隐私保护
马老师手写第二版Spring Security OAuth2.0认证授权教程
先是给大家基本概念,然后是基于Session的认证方式,紧接着会带着大家去快速的上手Spring Security,然后回去给大家详解解释Spring Security应用、然后就是分布式系统认证方案以及OAuth2.0,最后是Spring Security实现分布式系统授权!
|
8月前
|
SQL 存储 NoSQL
前后端分离认证实践指南:Spring Security和JWT详解(下)
前后端分离认证实践指南:Spring Security和JWT详解
163 0
|
10月前
|
SpringCloudAlibaba 前端开发 安全
SpringCloud Alibaba实战二十六 - Oauth2认证服务器自定义异常
SpringCloud Alibaba实战二十六 - Oauth2认证服务器自定义异常
285 0
Spring-security-oauth2 源码分析 登陆流程 /oauth/token (一)
Spring-security-oauth2 源码分析 登陆流程 /oauth/token (一)
Spring-security-oauth2 源码分析 登陆流程 /oauth/token (一)
|
Java Spring
五分钟带你玩转oauth2(二十)spring security+oauth2通过EnableOAuth2Sso实现单点登录
五分钟带你玩转oauth2(二十)spring security+oauth2通过EnableOAuth2Sso实现单点登录
225 0
五分钟带你玩转oauth2(二十)spring security+oauth2通过EnableOAuth2Sso实现单点登录
|
SpringCloudAlibaba 安全 前端开发
SpringCloud Alibaba实战二十七 - Oauth2认证服务器自定义异常
今天内容主要是解决一位粉丝提的问题:在使用 Spring Security OAuth2 时如何自定义认证服务器返回异常。
777 0
SpringCloud Alibaba实战二十七 - Oauth2认证服务器自定义异常
|
存储 安全 Java
OAuth2.0介绍|学习笔记
快速学习 OAuth2.0介绍
93 0
OAuth2.0介绍|学习笔记
|
存储 安全 Java
OAuth2在项目中使用完成的功能说明|学习笔记
快速学习OAuth2在项目中使用完成的功能说明
81 0
OAuth2在项目中使用完成的功能说明|学习笔记
|
安全 Java 数据安全/隐私保护
OAuth2.0四种模式说明|学习笔记
快速学习 OAuth2.0四种模式说明
297 0
OAuth2.0四种模式说明|学习笔记