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(混合流程)

参考 OIDC 规范

如何验证 Token 合法性

请参考:使用 OIDC 应用的密钥验证 Token 合法性

scope 参数对应的用户信息

scope 名称

对应信息

address

address

email

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

电子邮箱

email_verified

认证邮箱

gender

性别

birthdate

生日

zoneinfo

时区

locale

区域

phone_number

手机号

phone_number_verified

认证手机号

address

地址

formatted

详细地址

street_address

街道地址

locality

城市

region

postal_code

邮编

country

国家

updated_at

信息更新时间

参考 OIDC 规范

id_token、access_token 和 token 之间的区别

当你需要向你自己的服务器请求资源时,应该携带 id_token,同时你的服务器应该检验此 token 的合法性,然后再返回相应资源。id_token 相当于终端用户的身份证,用于认证用户身份。

当你需要向 Authing 服务器请求属于该用户的资源时,需要携带 access_token,拥有 access_token,你就能够以终端用户的身份,访问位于 Authing 服务器上属于他的资源。

当你需要向 Authing 服务器请求属于该用户的资源时,也可以携带 token。终端用户完成登录后,你的应用前端通过 AuthingSSO SDK 中的 trackSession 函数能够直接获取到用户信息,其中的 token 字段,相当于 Authing 与该终端用户维持内部会话状态的 Cookie。