# 一、前言

从基于计算机的应用出现开始,几乎每个开发者在其职业生涯内都会面对的一个最常见也是最复杂的问题,就是安全性(security)。这类问题意味着要考虑理解由谁提供什么数据/信息,此外还有关乎时间、校验、再校验等诸如此类的很多其他方面的事情。

而和安全性相关的所有关注点都可以被分解成两类问题:认证(Authentication) 和 授权(Authorization)。

实现认证和授权有多种途径,但时下最流行的是 基于令牌(token-based) 的方法。

# 二、认证(鉴权)框架

认证是这样一种验证过程:通过让用户、网站、应用程序通过提供合法证书或验证方式,以证明他们符合自己所宣称的身份。认证经常通过用户名和密码证实,有事也会辅以一些其他的只为用户所知的信息。这类信息或元素称为因子(factors)。基于这些因子,任何认证机制都可以划分为以下三类:

  1. 单因子认证: 只依赖用户名和密码
  2. 双因子认证: 除了用户名和密码,也需要一块保密信息(比如银行网站可能要求用户输入一个只有自己知道的 PIN)
  3. 多因子认证 (MFA): 使用两个或多个、来自不同类别的安全性因子(如医院系统需要用户名密码 + 用户智能手机收到的安全验证码 + 指纹信息)

# 三、授权框架

授权指的是一个验证某用户能访问什么的过程。在授权过程中,某用户/应用程序的权限级别被确定后,才被允许访问特定的 APIs/模块。通常,授权发生在用户身份被 认证 之后。

通常授权的过程如下:

  1. 用户登录A网站后
  2. 从A网站跳转到B网站获取授权(例如全民K歌跳转到微信获取授权)
  • 授权过程通常是根据clientId及相关验证A网站真实性和身份的数据,而B网站会预先录入相关的备案,保证网站A具有权限
  1. A网站获取到B网站授权,即可以根据权限和相关规则获取B网站的部分数据

# 四、参考

Last Updated: 2022-11-21 9:17:38 ├F10: AM┤