【项目01】OAuth 2.0

OAuth 2.0

  • OAuth,Open Authorization,是一种授权机制。用来分离第三方应用和资源数据。
  • OAuth 2.0,是2012年对原始开放授权协议的重写,是当前授权软件的行业标准框架。

角色

  • 资源所有者(Resource Owner):用户,可以授权应用获取账号信息。
  • 资源服务器(Resource Server):保存账号信息等资源数据。
  • 授权服务器(Authorization Server):验真身份及发放访问令牌。
  • 客户端(Client):第三方应用。

令牌

  • 资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。
  • 令牌(token)特性
    (1)令牌是短期有效的,到期会自动失效,用户自己无法修改。
    (2)令牌是可控的,可以被数据所有者撤销,会立即失效。
    (3)令牌是有权限范围的(scope)。
  • 保证了令牌既可以让第三方应用获得权限,同时又随时可控,不会危及系统安全。这就是 OAuth 2.0 的优点。
  • 只要知道了令牌,就能进入系统。系统一般不会再次确认身份,所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的。

模式

  • 第三方应用申请令牌之前,都必须先到系统备案,说明自己的身份,会拿到两个身份识别码:客户端 ID(client ID)和客户端密钥(client secret)。
  • OAuth 2.0 规定了四种获得令牌的流程
    (1)授权码模式(authorization-code)
    (2)隐式模式(implicit)
    (3)密码模式(password):
    (4)客户端凭证(client credentials)
  • 参数
    (1)response_type:表示要求返回授权码(AC)
    (2)client_id:说明是谁在请求
    (3)redirect_uri:接受或拒绝授权后,重定向供用户访问的地址
    (4)scope:表示要求的授权范围
  • AC:Authorization Code
  • AT:Access Token
  • RT:Refresh Token
https://b.com/oauth/authorize?
  response_type=code&
  client_id=CLIENT_ID&
  redirect_uri=CALLBACK_URL&
  scope=read

授权码(Authorization Code)模式

  • 授权码是通过授权服务器来获得的,授权服务器是客户端和资源拥有者之间的媒介。
  • 流程
    1、客户端构造了一个用于请求authorization code的URL并引导User-agent跳转访问。
    2、客户端发送clientID、clientSecret、scope、redirect参数请求账号服务器获取AC。
    3、账号服务器验证用户是否同意授权。
    4、账号服务器返回AC到客户端。
    5、客户端发送AC、clientID、clientSecret参数请求账号服务器获取AT、RT。
    6、账号服务器返回AT、RT到客户端。
    7、直到access token过期或失效之前,客户端可以通过资源服务器API访问用户的帐户,并具备scope中给定的操作权限。
    8、AT过期后,后端可以通过RT获取新的AT。

隐式模式(implicit)

  • 在隐式模式中,直接将AT颁发给Client,去除了发送AC的流程
  • 可以提高某些客户端的响应能力和效率
  • 流程
    1、客户端构造了一个用于请求authorization code的URL并引导User-agent跳转访问。
    2、客户端发送clientID、clientSecret、scope、redirect参数请求账号服务器获取AT
    3、账号服务器返回AT到客户端
    4、直到AT过期或失效之前,客户端可以通过资源服务器API访问用户的帐户,并具备scope中给定的操作权限。

密码模式(password)

  • 客户端能够直接获取用户凭据(用户名和密码),进而访问服务器资源
  • 流程
    1、用户向客户端提供用户名与密码作为授权凭据。
    2、客户端向授权服务器发送用户输入的授权凭据以请求 access token。
    3、授权服务器对客户端进行认证并检验用户凭据的合法性,如果检验通过,将向客户端派发 access token
    4、直到AT过期或失效之前,客户端可以通过资源服务器API访问用户的帐户,并具备scope中给定的操作权限。

客户端凭证(client credentials)

  • 适用于没有前端的命令行应用,即在命令行下请求令牌
  • 流程
    1、客户端可以直接使用它的client credentials或其他有效认证信息向授权服务器发起获取access token的请求。

参考:
https://www.ruanyifeng.com/blog/2019/04/oauth_design.html
https://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html
https://www.cnblogs.com/Wddpct/p/8976480.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值