KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA

术语工作定义(本课程口径) — keel 龙骨

SSO 工程课:协议、令牌与会话 的参考信息:术语工作定义(本课程口径)

只写本课判断要用到的那一层定义,以及经常被搞混的那一侧。
完整的来历、形态与衍生概念在《SSO 概念课》对应页。

术语 本课口径 常见误用
认证 / Authentication 回答「你是谁」。产物是一个身份结论(sub + 一组 claim)。 与授权混为一谈,导致「登录成功」被当成「有权限」
授权 / Authorization 回答「你能做什么」。属于《权限与多租户》。 指望 SSO 顺带解决权限
IdP / OP(Identity Provider / OpenID Provider) 签发身份结论的一侧。本课主案例里是 realm sso-lab。 以为 IdP 也管应用里的权限
SP / RP(Service Provider / Relying Party) 接受身份结论的一侧,即「应用」。 把 RP 当成 IdP 的下属组件——它是独立系统,只按协议合作
realm IdP 内的一组隔离配置:用户、客户端、密钥、会话各自独立。 把 realm 当成「一个应用」;实际是一个信任域
client / client_id 在 IdP 登记过的一个应用的身份。回跳地址、客户端类型都挂在它名下。 把 client_id 当密钥——公开客户端的 client_id 是公开的
公开客户端 / 机密客户端 拿不住秘密的是公开客户端(浏览器、移动端),只能靠 PKCE;有可信后端的可以持有 client_secret。 给公开客户端配 client_secret,等于把秘密发到前端
授权码 / code 一次性凭据,只表示「这次授权发生过」。它本身换不出任何东西。 把 code 当成 token 或登录凭证
PKCE / code_verifier / code_challenge 应用自己生成 verifier,把它的摘要作为 challenge 先送去;换 token 时再出示原文。 以为 PKCE 用来加密 code——它防的是 code 被截获后被别人兑换
state 应用生成的不可预测值,原样往返,用来把回跳与本次请求对上(防 CSRF/重放)。 用固定值或可预测值,等于没有
nonce 应用生成的不可预测值,被写进 ID Token,用来把「这次登录」与「这次 ID Token」绑上。 与 state 混用;两者防的不是同一件事
iss(issuer) 签发者的字面量标识。回跳里出现的是 RFC 9207 的授权响应发行者标识,用于 Mix-Up 防护。 以为「地址看起来一样」就相等——http/https、端口、末尾斜杠都算差异
ID Token 一次认证的结论,aud 是 client_id,会带 nonce / at_hash / sid / auth_time。 拿它去调 API;它是给应用读的,不是访问令牌
access token 访问受保护资源的凭据,本课主案例里 aud 是 account,并带角色等授权信息。 把它发给前端/存进 localStorage(暴露面完全不同,见 03 章)
refresh token 用来换新 access token 的长寿命凭据。默认会轮换但旧的不作废。 以为轮换等于作废——这两件事要分开验证
JWT / 三段结构 base64url(header).base64url(payload).base64url(signature)。中间段不加密,谁都能读。 以为「读不出来」才是安全;安全来自签名与各项校验
kid header 里的密钥标识,用来在多把密钥并存时选对那把(轮换的前提)。 忽略 kid、只用「当前唯一密钥」验签
JWKS 用 kid 索引的公钥集合。本课实验台的「JWKS」是同进程共享密钥,原因见 07 章。 以为 JWKS 里的是私钥或对称密钥
at_hash 把 access token 摘要绑进 ID Token,防止两者被拆开拼接。 以为它是 access token 的校验和
sid / session_state sid 是 IdP 侧会话的标识;session_state 是会随会话状态变化的值,用于前端感知登出。 用它替代应用自己的会话;应用仍有自己的会话要管
auth_time 真正的登录认证发生时刻(与 iat 签发时刻不同:刷新时 iat 会变,auth_time 不变)。 拿 iat 当「登录时间」
前/后通道登出(front/back-channel logout) IdP 通知各应用「这个会话没了」的两条通道:一条经浏览器,一条服务端直连。 以为登出是「清一下自己的 cookie」——会话在两侧都要清
end_session_endpoint IdP 的登出端点;id_token_hint 让 IdP 知道要结束哪条会话。 只调它却不处理应用的本地会话
联邦 / 多 IdP 一个应用接受多家 IdP 的结论。区分靠 iss / realm / 租户路由配置。 以为不同 IdP 下同一个人的 sub 相同——不保证相同
账号关联(account linking) 把多家 IdP 的 sub 归到本系统某个账号上。 用 email 当主键做关联(邮箱会变、会重名、可被改)
reuse detection 刷新令牌的「检测到旧令牌被再次使用就判为泄露」策略。不是默认开启的。 以为轮换本身就等于暴露检测
clock skew / 时间偏移 校验方与被校验方时钟不一致带来的 exp / iat 误判。 直接把容差窗口开得很大,「顺手」把过期令牌也放进来

进入 keel 阅读