OAuth2.0介绍

发布时间:2020-08-15 01:00:34 作者:u_7deeb657158f
来源:ITPUB博客 阅读:220

概述

OAuth 2.0 授权框架能够是第三方应用获取应用被保护的服务资源,它是一种授权互联网标准,由IETF(Internet Engineering Task Force)管理发布。
本文主要参考材料为 RFC 6749

初步理解

接下来以一个生活中的例子来简单解释OAuth3的应用场景。
我家所在的小区门禁系统升级,用户可以下载物业的手机APP,注册用户并通过物业审核之后,就可以使用APP中的“蓝牙开门”功能开启大门。
OAuth2.0介绍

有一次,朋友给我打电话说要到我家拜访,通过访客邀请功能填写基本的信息,然后发送一个微信小程序链接给朋友
OAuth2.0介绍

朋友点开小程序,点击一键开门就可以进入小区,当天有效并且限制使用8次
OAuth2.0介绍
整个过程就相当于一次授权:
小区可以理解成被保护的资源,我本人拥有APP的用户和密码,登陆后可以使用一键开门进入小区。
朋友打电话给我申请授权,我通过APP发放一个凭证(微信小程序),朋友可以在凭证有效期内进入小区。
授权机制可以方便的允许第三方(朋友)访问被保护的资源(小区),同时不需要提供用户密码。

OAuth3.0标准

OAuth3.0中的角色

OAuth3.0的流程

OAuth2.0介绍
(A) 客户端(Client)向资源拥有者(Resource Owner)申请授权,资源拥有者(Resource Owner)可以直接授权,但最好是通过Autherization进行授权
(B)客户端(Client)获得授权的允许凭据(Authorization Grant),在OAuth3.0中该凭据的获取有四种类型,授权码、隐藏式、用户密码和客户端凭证
(C)客户端(Client)使用授权凭据向授权服务器(Authorization Server)申请访问凭证(Access Token)
(D)认证服务器(Authorization Server)验证申请凭据(Authorization Grant),验证通过后颁发访问凭证(Access Token)
(E)客户端(Client)使用访问凭证(Access Token)访问资源服务器(Resource Server)
(F)资源服务器(Resource Server)验证访问凭证(Access Token),验证通过后对客户端(Client)请求进行处理并返回结果

刷新凭证(Refresh Token)

刷新凭证(Refresh Token)是由认证服务器(Authorization Server)颁发给客户端(Client),用于在当前凭证失效或者过期时,重新获取一个新的访问凭证(Access Token)。但颁发刷新凭证(Refresh Token)对于认证服务器(Authorization Server)是可选择的功能,如果支持,刷新凭证(Refresh Token)会与访问凭证(Access Token)一同颁发
OAuth2.0介绍
(A)客户端(Client)使用授权凭据(Authorization Grant)请求访问凭证(Access Tonken)
(B)认证服务器(Authorization Server)验证凭据通过后,颁发访问凭证(Access Token)和刷新凭证(Refresh Token)
(C)客户端(Client)使用访问凭证(Access Token)访问资源服务器(Resource Server)
(D)资源服务器(Resource Server)验证访问凭证(Access Token),验证通过对请求进行处理
(E)步骤(C)、(D)会不断重复,直到访问凭证(Access Token)过期,此时流程会跳转至(G)
(F)由于凭证过期,资源服务器会返回凭证过期的错误
(G)客户端(Client)使用刷新凭证(Refresh Token)请求新的访问凭证(Access Token)
(H)认证服务器验证刷新凭证,验证通过,办法新的访问凭证和刷新凭证

客户端的授权类型

授权码模式

流程

OAuth2.0介绍
(A)客户端(Client)使浏览器(User-Agent)跳转至认证服务器(Authorization Server)的认证接口,请求信息包含客户端标识、请求范围、跳转URI(跳转至客户端,用来提取授权码)
(B)认证服务器(Authorization Server)验证资源所有者(Resource Owner),通常就是用户填写用户名密码并确认是否授权
(C)认证服务器(Authorization Server)如果验证通过,则会返回给浏览器(User-Agent)步骤(A)中发送的跳转URI,跳转至客户端(Client),跳转URI中同时会携带授权码(Authorization Code)
(D)客户端(Client)使用授权码(Authorization Server)向认证服务器(Authorization Server)请求访问凭证(Access Token),同时还会携带跳转URI用于客户端提取访问凭证(Access Token)
(E)认证服务器(Authorization Server)验证授权码(Authorization Server),验证通过后颁发访问凭证(Access Token)

授权码请求(Authorization Request)

请求包含以下参数:

授权码响应(Authorization Response)

响应包含以下参数:

访问凭证请求(Access Token Request)
访问凭证响应(Access Token Response)
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}

隐藏模式

流程

OAuth2.0介绍
(A)客户端(Client)通过浏览器(User-Agent)跳转至认证服务器(Authorization),请求中包含客户端标识和跳转URI
(B)用户(Resource Owner)填写用户密码,认证服务器(Authorization)对其进行认证
(C)认证服务器(Authorization)认证通过后,返回之前传入的跳转URI至浏览器,跳转URI中以锚点(#)的方式包含访问凭证(Access Token)
(D)浏览器(User-Agent)跳转至URI指向的客户端的Web服务器,浏览器(User-Agent)保留锚点之后的信息
(E)客户端Web服务器返回一个web页面(其中包含嵌入的脚本),web页面能够提取锚点中的信息,并发送完整的URI至客户端
(F)浏览器(User-Agent)执行Web页面中的脚本
(G)浏览器(User-Agent)发送访问凭证(Access Token)至客户端(Client)

Authorization Request

参数包括:

GET /authorize?response_type=token&client_id=s6BhdRkqt3&state=xyz
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com
Access Token Response

参数包括:

HTTP/1.1 302 Found
Location: http://example.com/cb#access_token=2YotnFZFEjr1zCsicMWpAA
&state=xyz&token_type=example&expires_in=3600

用户密码模式

流程

OAuth2.0介绍
(A)资源所有者(Resource Owner)提供给客户端(Client)用户名和密码
(B)客户端(Client)使用用户名/密码,向认证服务器(Authorization Server)请求访问凭证(Access Token)
(C)证服务器(Authorization Server)验证用户名/密码,验证通过后颁发访问凭证(Access Token)

访问凭证请求 Access Token Request

参数包括:

POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=password&username=johndoe&password=A3ddj3w
访问凭证响应 Access Token Response
HTTP/1.1 200 OK
     Content-Type: application/json;charset=UTF-8
     Cache-Control: no-store
     Pragma: no-cache
     {
       "access_token":"2YotnFZFEjr1zCsicMWpAA",
       "token_type":"example",
       "expires_in":3600,
       "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
       "example_parameter":"example_value"
     }

客户端凭证模式

流程

OAuth2.0介绍
(A)客户端(Client)向认证服务器(Authorization Server)请求访问凭证(Access Token)
(B)认证服务器(Authorization Server)验证客户端(Client),如果验证通过则颁发访问凭证(Access Token)

Access Token Request

参数:

POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
Access Token Response
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"example_parameter":"example_value"
}
推荐阅读:
  1. 理解Oauth2.0
  2. oauth2.0理解

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

oauth2.0 介绍 au

上一篇:python项目实战:切换iframe模拟登陆126网易邮箱

下一篇:用Python爬虫告诉你王思聪上了多少次热搜?

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》