DESIGN DESIGN
  • 架构
  • 设计模式
  • 重构
  • UML
GitHub (opens new window)
  • 架构
  • 设计模式
  • 重构
  • UML
GitHub (opens new window)
  • 架构

    • 综合

    • 微服务

    • 安全

      • 认证和授权
      • OAuth 2.0
        • 授权码模式
        • 隐藏模式
        • 密码模式
        • 客户端凭证模式
        • 令牌的使用
        • 令牌的更新
        • 参考资料
    • 解决方案

  • 设计模式

  • 重构

  • DDD

  • UML

  • 设计
  • 架构
  • 安全
dunwu
2021-11-08
目录

OAuth 2.0

# OAuth 2.0

OAuth (opens new window) 是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是 2.0 版。

简单来说,OAuth 是一种授权机制。资源的所有者告诉系统,同意授权第三方应用进入系统,访问这些资源。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。

客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。

OAuth 2.0 定义了四种授权方式。

  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 密码模式(resource owner password credentials)
  • 客户端模式(client credentials)

# 授权码模式

授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该授权码获取令牌。

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

# 隐藏模式

有些 Web 应用是纯前端应用,没有后端。这时就不能用上面的方式了,必须将令牌储存在前端。RFC 6749 就规定了第二种方式,允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)"隐藏式"(implicit)。

# 密码模式

如果你高度信任某个应用,RFC 6749 也允许用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌,这种方式称为"密码式"(password)。

# 客户端凭证模式

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

# 令牌的使用

# 令牌的更新

如果用户访问的时候,客户端的"访问令牌"已经过期,则需要使用"更新令牌"申请一个新的访问令牌。

客户端发出更新令牌的 HTTP 请求,包含以下参数:

  • granttype:表示使用的授权模式,此处的值固定为"refreshtoken",必选项。
  • refresh_token:表示早前收到的更新令牌,必选项。
  • scope:表示申请的授权范围,不可以超出上一次申请的范围,如果省略该参数,则表示与上一次一致

# 参考资料

  • RFC 6749 (opens new window)
  • OAuth 2.0 的一个简单解释 (opens new window)
  • 理解 OAuth 2.0 (opens new window)
  • The Simplest Guide To OAuth 2.0 (opens new window)
📝 帮助改善此页面! (opens new window)
#架构#安全#认证#授权#OAuth 2.0
上次更新: 2024/01/27, 23:24:21
认证和授权
设计模式概述

← 认证和授权 设计模式概述→

最近更新
01
设计
04-27
02
微服务简介
04-15
03
如何设计系统
11-08
更多文章>
Theme by Vdoing | Copyright © 2019-2024 钝悟(dunwu) | CC-BY-SA-4.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×