logo头像

我有一个梦想

OAuth2.0简单理解

本文于 1610 天之前发表,文中内容可能已经过时。

[TOC]

一、定义

一个关于授权的开放网络标准。

允许用户让第三方应用访问该用户在某一网站上存储的私密的资源,而无须将用户名和密码提供给第三方应用

二、授权方式

四种授权方式:

  • 授权码(authorization-code)
  • 隐藏式(implicit)
  • 密码式(password)
  • 客户端凭证(client credentials)
1.授权码

第三方应用先申请和一个授权码,然后再用该码获取令牌

最常用流程,安全性也高。授权码通过前端传送,令牌则是存储在后端,而且所有与资源服务器的通信都在后端完成。这样前后端分离,可以避免令牌泄露

(类似于微信登录)

  1. A跳转B,请求授权码。
  2. B提示登录授权,授权后回跳到A,返回授权码
  3. A拿到授权码,向B的后端请求令牌
  4. A拿到令牌,正常访问B的资源
2.隐藏式

允许直接向前端办法令牌,这中方式没有授权码这个中间步骤

  1. A跳转B,请求令牌
  2. A拿到令牌,正常访问B的资源
3.密码式

允许用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌

  1. A带上B的用户名和密码访问,返回令牌
  2. A拿到令牌,正常访问B的资源

风险很大,除特殊情况一般不考虑吧使用,必须是用户高度信任的用户

4.凭证式

没有前端的命令行应用,在命令下请求令牌

  1. A在命令行请求B(client_id、client_secret)
  2. B验证通过,直接返回令牌,A正常请求B的资源

此方式不是针对用户的,二十针对第三方应用的,所以存在多用户共享同一令牌

三、更新令牌

一次性颁发两个令牌,一个用于获取数据,另一个用于获取新的令牌。令牌到期前,用户使用refresh token发送一个请求,去更新令牌