企业开放平台提供了OAuth2的授权码模式和客户端模式两种授权方式,获取客户端(接口调用方)对调用资源的授权。
1、统一登录就是授权码模式,返回的access_token中有用户信息(用户id)。
2、另一种就是客户端模式,是没有经过用户授权的,返回的access_token,没有携带企业用户信息(用户id),只有客户端(接口调用方)的client_id。
注意:企业开放平台提供统一的客户端密钥管理,统一授权,但目前开放平台的授权仅限于对开放平台的scope进行授权,比如bi接口,scope值为bi,具体的资源权限由bi应用系统来控制,比如说调用方只能调用bi系统的某些指定的接口等,这块日后开放平台会提供统一的资源权限授权解决方案。
OAuth2.1的设计背景,详细的协议介绍,开发者可以参考The OAuth 2.1 Authorization Framework,以及OpenID Connect Core 1.0 incorporating errata set 2。
请求方式:POST(HTTPS) Content-Type: application/x-www-form-urlencoded
请求地址:
正式环境: https://esp.xkw.cn/oauth2/token
沙箱测试环境:https://esp.doc.xkw.cn/oauth2/token
详细说明开发者可以参考The OAuth 2.1 Authorization Framework
参数 | 必须 | 说明 |
---|---|---|
grant_type | 是 | 当前值为client_credentials |
scope | 否 | 授权范围,多个使用空格分隔,如”bi sales"。 |
client_id | 是 | 企业服务平台分配的client_id |
client_secret | 是 | 企业服务平台分配的client_secret |
参数 | 说明 |
---|---|
access_token | 访问令牌,调用开放接口的凭证 |
scope | 授权范围,返回授权请求中的scope |
token_type | token类型 |
expires_in | access_token有效期,单位为秒 |
error_description | 错误描述 |
error_code | 错误码 |
error_uri | 错误详细说明地址 |
a) 成功返回示例如下:
{
"access_token": "eyJraWQiOiJjM2Q2ZDAxYiIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJvYSIsImF1ZCI6Im9hIiwibmJmIjoxNzEwNDkxNTI3LCJzY29wZSI6WyJiaSIsInNhbGVzIl0sImlzcyI6Imh0dHBzOi8vZXNwLmRvYy54a3cuY24iLCJleHAiOjE3MTA0OTE4MjcsImlhdCI6MTcxMDQ5MTUyN30.EAzeoxwK0AAs0E2XhFIPtuOD3ld50I33hSA6CTJIvhdPCTV9ozflMbHEHVNZBXtRwM7Xq8qw-b975vBjJywZ5aco4MUVx-YRWAWETbX0t3qzSEsMujzIEjbMol8mEyYukYW-5z2n1RCj_TOkhaEcgVIlEuzk-JmQbWV5SqZCjOOacTwA6fX-B8nu6PLGt7ARYEGSXfnA0cLiMURI4_3E0Y5YN-ArzesJWsmdfCmojX5tUxhOgNP_1GUQUT6Qu-5nAtyYSQl-7QNaTmdCmOOF9gyGjc59L6VN7zI9fluWCbYjF-BLk3CMHmq7h7Py7Bd4hl3OYmLH4iMrXvYc7kMpUw",
"scope": "bi sales",
"token_type": "Bearer",
"expires_in": 299
}
b)失败返回示例如下:
{
"error_description": "client_id不正确",
"error_code": "100006",
"error_uri": "https://esp.xkw.cn/doc/error?q=error_code"
}
access_token内容是jwt格式,解析内容如下:
从内容可以看出,是oa系统请求授权,对bi和sales应用系统的访问,头部内容是签名算法和公钥ID。
以上内容解析出来,scope值仅仅是openid,只是一个例子,可以为空,目前企业服务平台仅认证,不授权。后续升级使用会统一通知。
接口返回access_token有效期为expires_in,单位是秒,调用方要做好token的缓存处理,
缓存时间 = expires_in - 60 * 10
缓存时间只要将平台返回的expires_in减去10分钟即可。
注意:不要频繁请求获取access_token,以免被限流控制;
在http请求的header部分,增加以下内容,key为Authorization,value为"Bearer " + access_token值
key | Value |
---|---|
Authorization | Bearer eyJraWQiOiJjM2Q2ZDAxYiIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJvYSIsImF1ZCI6Im9hIiwibmJmIjoxNzEwNDkxNTI3LCJzY29wZSI6WyJiaSIsInNhbGVzIl0sImlzcyI6Imh0dHBzOi8vZXNwLmRvYy54a3cuY24iLCJleHAiOjE3MTA0OTE4MjcsImlhdCI6MTcxMDQ5MTUyN30.EAzeoxwK0AAs0E2XhFIPtuOD3ld50I33hSA6CTJIvhdPCTV9ozflMbHEHVNZBXtRwM7Xq8qw-b975vBjJywZ5aco4MUVx-YRWAWETbX0t3qzSEsMujzIEjbMol8mEyYukYW-5z2n1RCj_TOkhaEcgVIlEuzk-JmQbWV5SqZCjOOacTwA6fX-B8nu6PLGt7ARYEGSXfnA0cLiMURI4_3E0Y5YN-ArzesJWsmdfCmojX5tUxhOgNP_1GUQUT6Qu-5nAtyYSQl-7QNaTmdCmOOF9gyGjc59L6VN7zI9fluWCbYjF-BLk3CMHmq7h7Py7Bd4hl3OYmLH4iMrXvYc7kMpUw |
应用系统的开放接口,接口提供方就是增加令牌的合法性验证,验证通过后,可以获取令牌中的内容,比如接口的调用方等信息,与现有系统的验证方式不冲突,只是增加一个判断,可以两套方案并行,平滑过度;