【OIDC】补充概念

2022-10-05 23:26:26 浏览数 (1)

JWT (JSON Web Token)

一种 JSON 的编码规范。

JWT 通常的获得及使用流程:

  1. 【用户】 --请求认证-->【认证服务器】
  2. 【认证服务器】--要求用户登录-->【认证服务器】
  3. 【认证服务器】--签发 JWT --> 【用户】
  4. 【用户】--存储 JWT-->【用户】 ——————
  5. 【用户】--携带JWT请求-->【资源服务器】
  6. 【资源服务器】--验证JWT-->【资源服务器】
  7. 【资源服务器】--提供资源-->【用户】

Bearer Token

一段加密字符串(可以是 JWT),包含授权范围、有效期等信息。持有它,就可以无差别的访问资源。特殊写法 "Bearer TOKEN字符串",即在 Token 前面加上单词 Bearer 和空格。

Bearer Token 种的 Token,通常使用 JWT 形式。

ID Token

本质是包含了用户信息的 JWT。

代码语言:json复制
{
   "iss": "签发者,https://server.example.com",
   "sub": "用户 ID",
   "aud": "接受者,对应认证服务器中的 Client ID",
   "nonce": "Session ID",
   "exp": 1311281970,
   "iat": 1311280970,
   "auth_time": 1311280969,
   "acr": "urn:mace:incommon:iap:silver"
}

ID Token 的字段(参考 Authing.cn 和 OIDC 规范)

字段名

翻译

sub

subject 的缩写,唯一标识,一般为用户 ID

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

信息更新时间

Access Token

Access Token 用来授权访问资源。

Access Token 有随机字符串形式和 JWT 形式,随机字符串形式的一切解析工作都由认证中心来完成,JWT 形式可以在本地完成验证。通常我们都会使用 JWT 形式。

使用 JWT 形式,资源服务器会校验 AccessToken 的合法性,以及其 Scope 的是否包含特定项目。

JWT Access Token 不保存 除 用户 ID 之外的其他信息。

代码语言:json复制
{
  "jti": "JWT ID",
  "sub": "用户 ID",
  "iat": 签发时间戳,
  "exp": 到期时间戳,
  "scope": "openid email message",
  "iss": "签发者,http://xxx",
  "aud": "接受方"
}

Refresh Token

Access Token,ID Token 的有效期很短,为了避免频繁要求用户登录,所以出现了 Refresh Token。

用户初次完成认证是,同时获得 Access Token、ID Token 和 Refresh Token,前两个的有效期很短,后一个很长。

当 Access Token 或 ID Token 快到期的时候,应用需要携带 Refresh Token 到认证中心获得新的 Access Token 和 ID Token,

此事认证中心会返回新的 Access Token 和 ID Token 及 旧的 Refresh Token,直到 Refresh Token 过期。

代码语言:json复制
{
  "access_token": "jwt加密内容",
  "expires_in": 3600,
  "id_token": "jwt加密内容",
  "refresh_token": "随机字符串",
  "scope": "openid profile offline_access phone email",
  "token_type": "Bearer"
}

0 人点赞