OAuth2.0接入(new)
配置项清单
初始化过程中,工业云和合作方需要交换的配置项信息如下:
工业云提供
- client_id:客户端标识,用于表示合作方应用在此租户下的唯一标识。
- client_secret:客户端密钥,和client_id一一对应。
- authorize_uri:登录地址,合作方应用未登录时需要重定向到此地址发起登录授权请求。
- token_uri:请求令牌地址,合作方应用使用一次性授权码获取用户访问令牌。
- userinfo_uri:获取用户信息地址,合作方应用使用令牌获取用户详细信息。
合作方提供
- redirect_uri:回调URI,用于接收工业云发出的授权码。
单点登录(SSO)
流程介绍
- 合作方应用将用户浏览器重定向到工业云,携带客户端标识、回调 URI;
- 用户登录工业云进行身份认证与授权;
- 工业云返回访问令牌Access Token;
- 合作方应用使用Access Token向工业云请求用户信息;
- 工业云返回此次登录的用户信息。
对接步骤
1.用户未登录状态下,合作方应用需要重定向到工业云的authorize_uri进行身份认证,并携带参数如下:
其中相关参数的含义如下
参数名 | 示例 | 含义 |
---|---|---|
response_type | code | 固定为此值,表示为请求返回内容 |
state | xxxx | 非必传,CSRF安全参数,合作方应用客户端随机生成一串字符串,工业云认证完会原封不动返回此参数 |
scope | all | 多值属性,以空格分割。表示需要请求的用户信息范围 |
client_id | xxxxx | 客户端标识,用于表示合作方应用在此租户下的唯一标识。 |
redirect_uri | https://xxxx | 回调URI,用于接收工业云发出的授权码。 |
2.工业云会跳转到合作方应用的回调地址redirect_uri,携带授权码 code。code 是由工业云生成的随机字符串,若第一步携带了 state,也会返回原始 state。
3.合作方应用的回调地址接收到 code 之后,需要调用工业云的 token 接口获取 access_token。
工业云会提供一个 token 接口供合作方应用调用,此处为服务端之间的调用,浏览器不可见:
其中涉及的参数含义如下:
参数名 | 示例 | 传入方式 | 含义 |
---|---|---|---|
Authorization | Basic {Base64:[client_id:client_secret]} | header | 合作方应用需要使用 BasicAuth 的方式,传入 client_id 和 client_secret。具体操作方式为,将 client_id 加上“:”再加上 client_secret 拼接成字符串,进行 Base64 编码得到一个新的字符串,并在这串字符串前加上 Basic,中间留一个空格,得到最终需要的字符串。 具体操作方式为,将 client_id 加上“:”再加上 client_secret 拼接成字符串,进行 Base64 编码得到一个新的字符串,并在这串字符串前加上 Basic,中间留一个空格,得到最终需要的字符串。 非必传,CSRF安全参数,合作方应用客户端随机生成一串字符串,工业云认证完会原封不动返回此参数 |
grant_type | authorization_code | form表单 | 固定为此值,表示为授权码模式 |
code | xxxx | form表单 | 多值属性,以空格分割。表示需要请求的用户信息范围 |
redirect_uri | https://xxxx | form表单 | 回调URI,用于接收工业云发出的授权码 |
4.工业云接收到请求 Token 后,会验证 client_id、client_secret 以及 code、redirect_uri,验证成功之后会返回 JSON 格式的 token,如下所示:
其中:
参数名 | 示例 | 含义 |
---|---|---|
access_token | xxxx | 请求 token,用于请求详细用户信息。 |
RequestId | xxxx | 用于定位问题的id |
token_type | Bearer | 固定为 Bearer,后续请求用户信息时需要使用此种验证方式 |
expires_in | 3600 | 表示 token 过期时间,单位:秒 |
5.合作方应用使用 access_token 向工业云的 userinfo_uri 接口请求身份信息。此处为服务端之间的调用,请求如下所示:
其中:
参数名 | 示例 | 传入方式 | 含义 |
---|---|---|---|
Authorization | Bearer {access_token} | header | 合作方应用需要使用Bearer的方式,将上一步获取的 access_token,在其前面加上 Bearer 和一个空格,得到一个新的字符串。 |
6.工业云接收到 UserInfo 的请求后,验证 access_token 成功之后,返回信息如下,合作方应用根据此处返回的用户信息,登录对应的账号:
其中:
参数名 | 示例 | 含义 |
---|---|---|
id | 123 | 用户在工业云唯一 ID |
name | 张三 | 用户在工业云的显示名称 |
zhangsan@tencent.com | 用户在工业云的邮箱 | |
RequestId | Xxxx | 请求id,定位问题使用 |
type | 1 | 账号类型,1:主账户 2:子账户 |
tenantId | 123456 | 租户ID,账号为主账号时租户ID为账号id |
tenantName | 租户名称 | 租户名称 |
7.合作方需提供一个logout接口,支持入参id 为工业用户id,工业登出时会异步调用该接口通知三方应用登出。 调用示例: