|
|
##### 对接说明
|
|
|
|
|
|
|
|
|
##### OIDC
|
|
|
|
|
|
##### [认证授权] OIDC(OpenId Connect)
|
|
|
|
|
|
- OIDC是OpenID Connect的简称。它在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议。
|
|
|
- 参考资料:
|
|
|
- http://openid.net/connect/
|
|
|
- http://openid.net/connect/faq/
|
|
|
- http://openid.net/developers/certified/
|
|
|
- JWT : https://tools.ietf.org/html/rfc7519
|
|
|
- https://jwt.io
|
|
|
|
|
|
##### 认证过程:
|
|
|
|
|
|
- 基于Authorization Code的认证请求
|
|
|
详见: <a href="接口说明#1authorization-code-grant">Authorization Endpoint</a>
|
|
|
|
|
|
- 获取ID Token
|
|
|
|
|
|
使用上一步获得的code来请求Token EndPoint,这一步同OAuth2,详见: <a href="接口说明#1authorization-code-grant-1">Token Endpoint</a>
|
|
|
|
|
|
Token EndPoint会返回响应的Token,其中除了OAuth2规定的部分数据外,还会附加一个id_token的字段(见 <a href="#id-token">ID Token</a>)。例如(解密见:https://jwt.io ):
|
|
|
|
|
|
> {
|
|
|
> "access_token": "7d7ffdf1dd626ddc042f96b29ba8bf64",
|
|
|
> "refresh_token": "9844af4a27870037fbe9dd6c34407d1e",
|
|
|
> "scope": "4",
|
|
|
> "id_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJ6cmpZSUFzSE5mN3VuZkVGbVN0aCIsImlzcyI6Imh0dHA6Ly93LnVucG93ZXIub3JnL3NzbyIsInN1YiI6IkEyZDRqWFk2ZEZ0eGF3c2JzQWN5IiwiZXhwIjoxNTM1NDc1MTg2LCJpYXQiOjE1MzU0NzUwNjYsIm5vbmNlIjoiYzhiZDkzYWQtMzkzMC00ZWNlLWE0ZjQtNzNiYWM0ZmM4YmFhIiwibmFtZSI6IkFsaWNlIiwiYWNjb3VudCI6IkFsaWNlIiwidGVuYW50IjoiODQyOTZhMWUtNmEzNS0xMWU4LWJlYjEtODRhNmM4NGFlMjQ2IiwiaWQiOiI4NDNkODE0NC02YTM1LTExZTgtYmViMS04NGE2Yzg0YWUyNDYifQ.jJmv6oLmB8-y18hy2xT5IcdFWTAytD20jIX3JEU38pA",
|
|
|
> "token_type": "Bearer",
|
|
|
> "expires_in": 2000000
|
|
|
> }
|
|
|
|
|
|
|
|
|
##### ID Token
|
|
|
- ID Token是一个安全令牌,包含用户信息(由一组Cliams构成以及其他辅助的Cliams)的JWT格式的数据结构。
|
|
|
- sub (Subject Identifier)
|
|
|
* 租户内的唯一id,一般称为[openid](https://git.qtgl.com.cn/product/ketanyun-v2-support/-/wikis/%E6%9C%AF%E8%AF%AD%E8%A1%A8),不会为空
|
|
|
* 以下两种情况例外,会返回第三方提供的账号:
|
|
|
* 本地数据库虽然有账号,但通过[配置项 `IGNORE_ACCOUNT_NOT_FOUND` 配置了"不验证本地账号"](https://git.qtgl.com.cn/product/ketanyun-v2-support/-/wikis/%E7%A7%91%E6%8E%A2%E4%BA%91%E5%B9%B3%E5%8F%B0%E9%85%8D%E7%BD%AE)
|
|
|
* 本地数据库无账号
|
|
|
- 科探扩展字段说明:
|
|
|
|
|
|
| 字段名 | 类型 | 含义 |
|
|
|
|------|------|------|
|
|
|
| account | string | 推荐优先使用的用户id,用于openid不统一的情况。可为空,为空时请使用sub |
|
|
|
| tenant | string | 用户所属的租户的标识,格式上一般是域名(但不保障) |
|
|
|
|
|
|
- 一个ID Token的样例:
|
|
|
|
|
|
```
|
|
|
{
|
|
|
"aud": "zrjYIAsHNf7unfEFmSth",
|
|
|
"iss": "http://w.unpower.org/sso",
|
|
|
"sub": "A2d4jXY6dFtxawsbsAcy",
|
|
|
"exp": 1535475186,
|
|
|
"iat": 1535475066,
|
|
|
"nonce": "c8bd93ad-3930-4ece-a4f4-73bac4fc8baa",
|
|
|
"name": "Alice",
|
|
|
"account": "Alice",
|
|
|
"tenant": "example.com",
|
|
|
"id": "843d8144-6a35-11e8-beb1-84a6c84ae246"
|
|
|
}
|
|
|
``` |
|
|
\ No newline at end of file |