# OIDC 常见问题

了解 OIDC 包含的常见问题,在开发时可以查阅此文档。

# OIDC 在后端如何处理

请参考 Github 上的示例:oidc-demo (opens new window)

# 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 规范 (opens new window)

# 如何验证 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 字段

# 用户信息字段含义

字段名 翻译
sub 唯一标识
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 规范 (opens new window)

# id_token、access_token 和 token 之间的区别

id_token 相当于用户的身份证,开发者的前端访问后端接口时应当携带 id_token,开发者服务器应该校验用户的 id_token,验证通过后返回相关资源,可用 OIDC 应用的密钥或 OIDC 应用公钥验签,然后可以得到此 token 对应的用户 ID 以及基本信息。示例代码请见:使用 OIDC 应用的密钥验证 Token

access_token 用于请求 Authing 服务器上该用户持有的资源。你访问 Authing 服务器的请求需要在 Authorization 请求头中携带此 access_token,示例代码如下:

const axios = require('axios');
axios.get({
  url: 'https://core.authing.cn/api/v2/your/resources',
  headers: {
    'Authorization': 'Bearer YOUR_OIDC_ACCESS_TOKEN'
  }
}).then((res) => {
 // custom codes
})

token(Authing Token) 不推荐使用。相当于用户与 Authing 之间的 Cookie-Session,效力与 access_token 一样,可以获取到用户在 Authing 的相关资源。你可以发送此 token 到 Authing 服务器进行验证,详情请见:在线验证 Authing Token