梳理一下关于认证和授权的一些知识
本文全面讲解认证和授权的概念及其区别,包括身份与资源分离的意义。对LDAP协议进行深入介绍,包括其树状结构、基本模型和适用场景;详细分析OAuth2.0授权标准的四种授权模式及主体角色;并简述OIDC协议如何作为OAuth2.0的超集实现用户认证与资源授权的统一。适合开发者理解现代身份验证系统的基础架构。
什么是认证和授权
认证(Authentication),识别身份
授权(Authorization),授予被识别的身份是否有权限获取指定资源,或授予其操作权限
认证的双方是访问者(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): 名字前缀(姓)
基本模型:
信息模型,将信息以树状方式组织,基本数据单元是条目(Entry), 条目又由不同属性组成
命名模型,实现一种条目定位方式
功能模型,实现增删改查等功能
安全模型,实现身份认证,安全通道,访问控制
OAuth2.0
OAuth 2.0 是一个授权标准协议,主要用于 资源授权。
前面提到的身份和资源的分离,OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。
所以,OAuth 的核心就是向第三方应用颁发令牌。
根据 OAuth 2.0 协议规范,主要有四个主体:
授权服务器(Authorization Server),负责颁发 Access Token,Authing 是授权服务器。
资源所有者(Resource Owner),即 用户,授权其他人访问他的资源。
调用方(Client),即第三方应用。调用方请求获取 Access Token,经过用户授权后,授权服务器为其颁发 Access Token。调用方可以携带 Access Token 到资源服务器访问用户的资源。
资源服务器(Resouce Server),存储用户资源。收到 Access Token 后,验证它的被赋予的权限项目,最后返回资源。
这个过程可能还存在其它主体,如浏览器,也称用户代理(User Agent), 服务提供商(Server Provider)等。
客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0 定义了四种授权方式。
授权码模式(authorization code)
简化模式(implicit)
密码模式(resource owner password credentials)
客户端模式(client credentials)
授权码模式(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 下资源提供者的资源。