认证(Authentication) 与 授权(Authorization) 是两个部分(虽然都简写为Auth),分别解决“你是谁”和“你能做什么”的问题。
认证 是一个基础流程,即证明“我是我”的过程,而授权是基于认证流程的。
授权 一般针对于访问资源进行控制,例如你分享给别人的文件,用户A可以访问,而用户B不行。而对于本项目而言,由于每个玩家能且仅能访问自己的游戏数据,权限不容易变化,因此并不需要设计 “授权” 这一个流程,因此不用考虑授权,仅考虑认证。
认证的一般流程可以概括为 提交凭证 -> 验证身份 -> 颁发凭据 -> 凭据使用 ,流程图如下:
flowchart TD
A[用户发起请求] --> B{是否已认证?}
B -->|否| C[提交身份标识<br/>用户名/邮箱/手机号等]
C --> D[提交凭证<br/>密码/OTP/证书等]
D --> E{凭证存储类型?}
E -->|密码哈希| F[计算哈希值对比<br/>MD5/SHA1/bcrypt/Argon2等等]
E -->|aPAKE| G[执行OPRF协议<br/>AKE密钥交换]
E -->|外部IdP| H[转发至OIDC/SAML<br/>IdP验证]
F --> I[验证通过]
G --> I
H --> I
I --> J[生成认证凭据]
J -->|Stateful| K[创建Session<br/>存储至Redis/DB]
J -->|Stateless| L[签发JWT<br/>含签名和声明]
K --> M[返回Opaque Token<br/>Set-Cookie]
L --> N[返回JWT Token<br/>JSON响应]
M --> O[后续请求携带凭据]
N --> O
O --> P{凭据验证方式?}
P -->|Session| Q[查询存储验证<br/>有效性&过期]
P -->|JWT| R[本地验签验证<br/>无需查询DB]
Q --> S[认证成功<br/>获取用户上下文]
R --> S
S --> T[执行授权检查<br/>RBAC/ABAC]
T --> U[返回请求资源]
B -->|是| O
style I fill:#90EE90,stroke:#006400
style S fill:#90EE90,stroke:#006400
TIPS: 上述的MD5、SHA1等由于安全性问题,不再推荐使用。
而现代密码学则提供数学工具和安全性证明,这些工具使得认证流程安全可信。 认证流程得以安全可信,离不开密码学提供的基础工具。
认证协议的核心作用是将抽象的密码学算法编排成可交互、可验证的身份确认流程。
AI总结: 认证是目的,认证协议是实现路径,密码学是路径的基石。
提示: 本页部分内容由AI生成,请注意分辨
参见:认证