Skip to content

认证(Authentication)和授权(Authorization)

· 7 min
TL;DR

梳理一下关于认证和授权的一些知识

本文全面讲解认证和授权的概念及其区别,包括身份与资源分离的意义。对 LDAP 协议进行深入介绍,包括其树状结构、基本模型和适用场景;详细分析 OAuth2.0 授权标准的四种授权模式及主体角色;并简述 OIDC 协议如何作为 OAuth2.0 的超集实现用户认证与资源授权的统一。适合开发者理解现代身份验证系统的基础架构。

什么是认证和授权#

认证的双方是访问者 (User)、身份信息持有者 (IdP/Identity Provider)。

用户持有的唯一标识符 (用户名,UUID 等),密码信息(密码,指纹等)需要与 IdP 持有的信息匹配才能认证成功。

资源持有者 (Source Owner),控制资源的获取,修改,删除等。

资源可能是用户自己产生的,也可能是第三方服务器产生的,或者叫做 Service Provider(SP),也称 Client。

身份和资源的分离即为 IdP, SP 分离

IdP 与 IdP 之前也可以进行资源传递,并授权。这种方式一般称为 联邦授权


LDAP#

LDAP(Light Directory Access Protocol) 即轻量级目录访问协议,它是一种为 查询浏览搜索 而优化的专业分布式数据库,它呈树状结构组织数据,和 关系数据库 不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据,所以大多数是用来查询的。LDAP 只是一种协议,可以有多种实现。

一般结构:

DIT(Directory Information Tree)目录信息树 dn(Distinguished Name):一条记录的详细位置,相当于绝对路径 (唯一) rdn(Relative dn) : 相对 dn, 相对于相对路径 dc(Domain Component) :一条记录所属区域 (哪一颗树) ou(Organization Unit) :一条记录所属组织(哪一个分支) cn/uid(Common Name/user id):一条记录的名字/ID (哪一个苹果名字) sn(Surname): 名字前缀 (姓)

基本模型:


OAuth2.0#

OAuth 2.0 是一个授权标准协议,主要用于 资源授权

前面提到的身份和资源的分离,OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。

所以,OAuth 的核心就是向第三方应用颁发令牌

根据 OAuth 2.0 协议规范,主要有四个主体:

这个过程可能还存在其它主体,如浏览器,也称用户代理 (User Agent), 服务提供商 (Server Provider) 等。

客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0 定义了四种授权方式。

授权码模式(authorization code)是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与 “服务提供商” 的认证服务器进行互动。

它的步骤如下:

(A)用户访问客户端,后者将前者导向认证服务器。

(B)用户选择是否给予客户端授权。

(C)假设用户给予授权,认证服务器将用户导向客户端事先指定的 “重定向 URI”(redirection URI),同时附上一个授权码。

(D)客户端收到授权码,附上早先的 “重定向 URI”,向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。

(E)认证服务器核对了授权码和重定向 URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。


OIDC#

OIDC(OpenID Connect ) 是 OAuth 2.0 协议的超集,能够认证用户并完成资源授权。OIDC 的认证和授权分为 四种模式:授权码模式(Code)、隐式模式(Implicit)、密码模式(Password)、客户端证书模式(Client Credential)

除了 OIDC 协议之外,还存在着许多标准身份协议,例如 SAML 和 CAS。它们的存在意义都是类似的:为了能让素不相识的 SP 和 IdP 进行快速对接,在用户的许可下让 SP 在 IdP 处完成授权,从而访问 IdP 下资源提供者的资源。

参考链接#