OIDC 常见问题
了解 OIDC 包含的常见问题,在开发时可以查阅此文档。
OIDC 在后端如何处理
请参考 Github 上的示例:oidc-demo
OIDC 三种认证流程的特征对比
特性 | 授权码流程 | 隐式流程 | 混合流程 |
所有 token 全部从授权路由返回 | no | yes | no |
所有 token 都从 token 路由返回 | yes | no | no |
token 不会暴露给前端 | yes | no | no |
客户端可以被 AP 认证 | yes | no | yes |
可以刷新 token | yes | no | yes |
一次交互 | no | yes | no |
必须服务器-服务器通信 | yes | no | varies |
不同 response_type 对应的授权流程
"response_type" value | Flow |
code | Authorization Code Flow(授权码流程) |
id_token | Implicit Flow(隐式流程) |
id_token token | Implicit Flow(隐式流程) |
code id_token | Hybrid Flow(混合流程) |
code token | Hybrid Flow(混合流程) |
code id_token token | Hybrid Flow(混合流程) |
如何验证 Token 合法性
请参考:使用 OIDC 应用的密钥验证 Token 合法性。
scope 参数对应的用户信息
scope 名称 | 对应信息 |
address | address |
email,email_verified | |
phone | phone_number, phone_number_verified |
profile | birthdate,family_name,gender,given_name,locale,middle_name,name,nickname,picture,preferred_username,profile,updated_at,website,zoneinfo |
offline_access | token 接口返回 refresh_token 字段 |
unionid | unionid |
用户信息字段含义
字段名 | 翻译 |
sub | 唯一标识 |
openid | openid |
unionid | unionid |
name | 姓名 |
given_name | 名字 |
family_name | 姓氏 |
middle_name | 中间名 |
nickname | 昵称 |
preferred_username | 希望被称呼的名字 |
profile | 基础资料 |
picture | 头像 |
website | 网站链接 |
电子邮箱 | |
email_verified | 认证邮箱 |
gender | 性别 |
birthdate | 生日 |
zoneinfo | 时区 |
locale | 区域 |
phone_number | 手机号 |
phone_number_verified | 认证手机号 |
address | 地址 |
formatted | 详细地址 |
street_address | 街道地址 |
locality | 城市 |
region | 省 |
postal_code | 邮编 |
country | 国家 |
updated_at | 信息更新时间 |
id_token、access_token 和 token 之间的区别
当你需要向你自己的服务器请求资源时,应该携带 id_token,同时你的服务器应该检验此 token 的合法性,然后再返回相应资源。id_token 相当于终端用户的身份证,用于认证用户身份。
当你需要向 Authing 服务器请求属于该用户的资源时,需要携带 access_token,拥有 access_token,你就能够以终端用户的身份,访问位于 Authing 服务器上属于他的资源。
当你需要向 Authing 服务器请求属于该用户的资源时,也可以携带 token。终端用户完成登录后,你的应用前端通过 AuthingSSO SDK 中的 trackSession 函数能够直接获取到用户信息,其中的 token 字段,相当于 Authing 与该终端用户维持内部会话状态的 Cookie。
Last updated