当前位置 : 首页 » 文章分类 :  开发  »  OAuth2

OAuth2

OAuth2 笔记
OAuth 2.0 协议是一种三方授权协议,目前大部分的第三方登录与授权都是基于该协议的标准或改进实现。

OAuth 是一个开放标准,提供了一种简单和标准的安全授权方法,允许用户无需将某个网站的用户名密码提供给第三方应用就可以让该第三方应用访问该用户在某网站上的某些特定信息(如简单的个人信息),现在一般用的是 OAuth 2.0(不兼容1.0)。

作为第三方登录服务提供方,核心矛盾点就是 既要让用户在对接我们服务的 APP 上登录,同时还不能让该 APP 拿到用户的登录凭证。解决这一矛盾的利器就是 token(中文译为令牌),而 OAuth 协议的最终目的就是给第三方应用下发 token,它记录了用户的登录或授权状态,通过将 token 传递给第三方应用,既能让第三方应用登录并拿到用户许可数据,也可以将用户的凭证牢牢拽在自己的手里(token 是加密存储的,所以不担心因 token 下发而泄露用户凭证数据)。


OAuth2的四种授权模式

OAuth2.0 相对于 1.0 版本在授权模式上做了更多的细化,已定义的授权模式分为四种:
1)授权码模式(Authorization Code Grant);
2) 隐式授权模式(Implicit Grant);
3)资源所有者密码凭证模式(Resource Owner Password Credentials Grant);
4)以及客户端凭证模式(Client Credentials Grant)。

授权码授权模式(Authorization Code Grant)

授权码模式在整个授权流程上与 1.0 版本最贴近,但是整个流程还是要简化了许多,也是 OAuth2.0 中最标准,应用最广泛的授权模式。这类授权模式非常适合于具备服务端的应用


token

OAuth2.0 协议定义了授权详细流程,并最终以 token 的形式作为用户授权的凭证下发给客户端,客户端后续可以带着 token 去请求资源服务器,获取 token 权限范围内的用户资源。
对于 token 的描述,OAuth2.0 协议只是一笔带过的说它是一个字符串,用于表示特定的权限、生命周期等,但是却没有明确阐述 token 的生成策略,以及如何去验证一个 token。

授权服务器通过下发 token 来给客户端颁发获取用户受保护资源的资格,且不会因此而泄露用户的登录凭证信息。 Token 对于客户端应该是非透明的,客户端只知道这是一个字符串,能够用它来获取用户的受保护资源,对于字符串内部所含的信息应该无从知晓,也不能通过其它方法去解密其中的信息。 所以token应该是一类对称加密得到的字符串,并且只有授权服务器持有对称密钥,用于对生成的token进行加密和验证。

Bearer类型token

BEARER 类型 token 是建立在 HTTP/1.1 版本之上的 token 类型,需要 TLS(Transport Layer Security)提供安全支持。

BEARER 类型 token 定义了三种 token 传递策略,客户端在传递token时必须使用其中的一种,且最多一种

放在Authorization请求首部

请求示例:

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer mF_9.B5f-4.1JqM

放在请求实体中

Token需放置在access_token参数后面,且Content-Type需要设置为application/x-www-form-urlencoded,请求示例如下:

POST /resource HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

access_token=mF_9.B5f-4.1JqM

放在URI请求参数中

该方式通过在请求URl后面添加access_token参数来传递token,请求示例如下:

GET /resource?access_token=mF_9.B5f-4.1JqM HTTP/1.1
Host: server.example.com

客户端在请求时需要设置Cache-Control: no-store,服务端在成功响应时也需要设置Cache-Control: private。
由于很多服务都会以日志方式去记录用户的请求,此类方式存在较大的安全隐患,所以一般不推荐使用,除非前两种方案均不可用。

MAC类型token


OAuth2.0协议原理与实现:协议原理
https://my.oschina.net/wangzhenchao/blog/851773

OAuth2.0协议原理与实现:TOKEN生成算法
https://my.oschina.net/wangzhenchao/blog/856964

OAuth2.0协议原理与实现:协议实现
https://my.oschina.net/wangzhenchao/blog/862094

OAuth 2.0 开放授权那些事儿
http://www.zhenchao.org/2018/03/04/protocol/oauth-v2-protocol/


上一篇 SSO单点登录

下一篇 Apache-RocketMQ

阅读
评论
1.2k
阅读预计4分钟
创建日期 2019-05-15
修改日期 2019-05-15
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论