美文网首页OAuth
指南真简单教程 —— OAuth2.0鉴权框架

指南真简单教程 —— OAuth2.0鉴权框架

作者: holyhigh2 | 来源:发表于2020-12-06 00:15 被阅读0次

本文不涉及

IETF是干什么的

TLS / SSL/HTTPS

标准/规范

RFC6749

OAuth2.0概念

OAuth2.0是一个授权框架规范 —— 定义了第三方应用如何获取服务器授权并访问。框架中定义了客户端类型、4种授权方式、accessToken和refreshToken的描述以及TLS和HTTP重定向的应用等。

客户端Client

任何想要访问受保护资源并且要进行鉴权请求发送的应用就是一个客户端,可以是在浏览器、服务器、桌面应用或者其他设备上运行的应用。

任何client在进行鉴权之前都必须进行注册,包括指定client类型和重定向地址。每个注册的client都会在服务器获得唯一的客户身份(通常标注为client_id),而客户身份会影响到鉴权的方式,比如授信客户就可以通过password / implicit方式进行鉴权,当然,必须基于TLS。

4种鉴权方式

授权码 —— 这是一种基于重定向的授权方式。流程复杂,安全性高,适合开放型客户的鉴权

1. 使用client_id + redirectionURI + state + 其他属性来请求验证。查看请求参数规范

2. 服务器需要验证除state外的其他参数是否与client注册时一致,成功后强制跳转到redirectionURI指定的地址并会在查询参数中附带授权码以及之前传递的state

3. 使用第二步拿到的授权码 + client_id + redirectionURI 请求访问码

4. 服务器验证授权码与client_id匹配,并且redirectionURI与第一步请求中的值相符后返回访问码、刷新码过期时间等的JSON对象。查看响应值规范

隐藏授权码 —— 基本与授权码模式相同,但少了一步获取授权码,可以直接获取访问码。

1. 使用client_id + redirectionURI + state + 其他属性来请求验证。查看请求参数规范

2. 服务器验证通过后强制跳转到redirectionURI指定的地址并会在url片段标识中附带访问码以及之前传递的state。因为访问码会暴露给用户,所以返回结果中不包含刷新码。查看响应值规范

用户名/密码授权 —— 该授权方式务必仅用于信任应用,比如自建项目中的web/app。常用于把基于传统的cookie鉴权方式变更为访问码鉴权方式。

1. 使用用户名、密码来请求访问码。查看请求参数规范

2. 服务器验证成功返回访问码、刷新码、过期时间等的JSON对象。查看响应值规范

客户凭证授权 —— 该授权方式仅需告诉服务器自己是哪个client即可,无需鉴权。适合用在可信范围内的伙伴应用,比如同一个网关内的非自建项目的数据访问

术语解释

state —— 所有鉴权方式都推荐的一个属性,用来解决跨域攻击CSRF。请求资源服务器时带上同时保存在web服务器中,当重定向发生时与自己服务器中的值对比,如果不同就表示发生了劫持

refreshToken —— 传统的session方式会在请求交互时刷新过期时间,这增加了CSRF的几率。在OAuth2.0中,访问码到期必须过期,对于授信客户如果想要实现类似session的无感刷新就可以使用刷新码在访问码过期前刷新。当然,过期后刷新也完全可以,这取决于你的交互涉及。

相关文章

网友评论

    本文标题:指南真简单教程 —— OAuth2.0鉴权框架

    本文链接:https://www.haomeiwen.com/subject/igjebctx.html