IDaaS 提供的所有业务接口都必须携带对应的 access_token 才能请求。未携带 access_token 的请求会提示错误。
与 IDaaS 交互的过程中可能会接触到如下类型 token:
应用级 access_token
用户级
access_token,登录成功后
id_token
refresh_token
管理级 (未上线)
应用级 access_token
用于调用 IDaaS 登录相关接口,包括注册、登录、二次认证、找回密码等。
使用应用的 client_id
和 client_secret
,通过 OAuth 2.0 client_credentials 客户端模式从 IDaaS 获取。
默认有效时长 2 小时。过期请重新获取,暂不支持刷新或有效时长变更。
用户级 access_token、id_token 和 refresh_token
这三种 token 在用户成功登录后会统一返回。
access_token
用于调用后续 IDaaS 提供的用户自服务接口,包括修改手机号、账号注销等。token 默认 2 小时有效,可以在应用创建时指定,亦可配置修改。
id_token
用于身份验证。只有当登录时传递 response_type
参数为 token id_token
时才会返回。
未来 CIAM 将会允许使用 id_token 实现跨域单点登录。除此外,id_token 还会包含当前已登录用户的最基本信息,可以直接获取使用,避免额外接口请求。
id_token 采用 JWT 格式。可以在 https://jwt.io/ 网站中预览 id_token 内容。
id_token 中的 payload 参数参考如下:
{
"sub": "61a76111efc5d7d37fe62421e475d0b1djM9R1Hkhkn", // token 所识别用户的唯一标识
"gtp": "password",
"cookie": "",
"azp": "",
"scope": "61a76111efc5d7d37fe62421e475d0b1djM9R1Hkhkn null 17301078373",
"loginName": "michael_test", // 登录使用的用户名
"customerId": "8674692815791024010",//外部ID
"exp": 1632906904, // token 失效时间,单位秒
"jti": "eWEMG3hVwxth6jGRyhuADA", // jwt token id,token 唯一标识
"iat": 1632899705, // issued at,创建时间参数,单位秒
"nbf": 1632899645 // not before,token 不应比 nbf 时间更早使用
}
refresh_token
用于刷新 access_token。id_token 不受影响。
出于安全性考虑 access_token 的有效时间一般较短,通常为 2 小时,但若每两个小时要用户重新登录,体验太差。refresh_token 提供了折中解决方案。
refresh_token 和 access_token 会同时返回,但 refresh_token 的有效期较长,默认为 30 天。在 refresh_token 有效期范围内,可以使用 refresh_token 调用 token 刷新接口获取新的 access_token 使用。避免用户被迫反复登录。
access_token 和 refresh_token 均过期时,用户需要重新登录。