网页应用免登
身份验证为应用 web 系统提供了获取正在访问的UC用户身份的能力,便于应用 web 系统构建登录流程。
步骤
第一步:获取Client ID 与 Client Secret
企业管理员可登陆企业管理平台,在应用管理菜单下选择编辑对应应用。在应用编辑界面的应用凭证菜单下可获得应用唯一的Client ID 与 Client Secret。
第二步:获取授权码code
获取授权码有三种方式:
第一种:从url携带的参数中获取(适用于工作台窗口、独立UME浏览器窗口、系统浏览器打开)
首先需要应用打开主页跳转配置中的应用免登开关。
打开开关后,从ume工作台打开应用主页时,会自动将授权码code携带在url上。例如:https://www.baidu.com?code=abcdefg
应用前端需要获取参数中的code字段内容来获取授权码。
第二种:主动调用jsapi获取(适用于工作台窗口和独立UME浏览器窗口打开)
- 在需要进行免登的页面引入UC提供的JS文件:
<script src="/ume-js-api-4.0.4.js"></script>
- 通过主动调用js方法获取code:
ume.permission.getCode({
clientId:"",// 应用程序对应的 Client ID
redirectUri:"",// 应用的访问地址
success: function (res) {
// 成功回调参数
// 如:{"code":"xxx"}
}
})
详情请查看 UME JS-API接口文档.zip。
第三种:访问UC免登页面获取(适用于工作台窗口和独立UME浏览器窗口打开)
UC提供了一个免登页面以帮助应用获取授权码code,然后自动携带code重定向到应用地址。
具体页面地址为:{{UC服务器地址}}+/ume/workbench/pc/authen
。
需要携带两个参数在url上:
- clientId:应用自身clientId
- redirectUri:需要重定向到的地址。(参数需要经过 URLEncode 处理)
例如https://www.yealink.com/ume/workbench/pc/authen?clientId=cli_9dff7f6ae&redirectUri=http%3A%2F%2Fwww.yealink.com
code 有效期为5分钟,且只能使用一次。
第三步:获取access token
获取到code之后,需要携带code和redirect_uri获取access token。具体获取接口参考获取访问凭证。
redirect_uri参数内容为当前浏览器访问的地址。
UC系统授信的redirect_uri地址为管理员为应用配置的PC&移动端主页地址。
token 有效期为 1 小时。建议在40分钟左右使用refresh token再次请求获取新token,避免token过期造成的请求失败,与此同时旧的 token 依然有效。
请求消息示例
POST /open/api/v2/token HTTP/1.1
Content-Type: application/json
accept: application/json
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
timestamp: 1610544682145
nonce: aac64aa63454457294d440d8be191254
{
"grant_type": "authorization_code",
"code": "XXXXXXXXXXXX",
"redirect_uri":"xxxxx"
}
响应参数示例
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token": "[JWT TOKEN]",
"token_type": "bearer",
"refresh_token": "[JWT TOKEN]",
"expires_in": 3599,
"refresh_expires_in": 86399
}
第四步:获取登陆用户信息
获取到用户级access token后,可请求用户查询接口获取当前登陆用户信息。具体获取接口参考查询登陆用户详情。应用内部维护当前登录用户与自身账号体系的关联关系
请求消息示例
GET /open/api/v2/users/me HTTP/1.1
Host: api.yealink.com
Content-Type: application/json
响应参数示例
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
{
"id": "9ecc83e4c7d44728bbb1e2ec226dffe7",
"partyId": "c22c0ab68bc74219aa894261b2d131dc",
"groupId": "65ddf0d5c0d64d4aab3bacc2cd690c28",
"type": 2,
"name": "zd3",
"email": "test@yealink.com",
"number": "145516*2222",
"status": "offline",
"extension": null,
"extAccount": "zd3",
"mobile": "13500000000",
"title": null,
"gender": 0,
"accountStatus": 0,
"emailBound": false,
"mobileBound": false,
"permissionCode": "A",
"enableMeetingNow": false,
"enableMeetingAppoinitment": true
}
第五步:刷新access token
refresh_token用途
- 免登操作成功后,因access_token有效期较短,当access_token 过期时 便可携带refresh_token(该refresh_token取第三步请求响应体中的refresh_token响应参数)调用接口获取新的access_token 和 refresh_token,以保证调用UC API接口时携带的access_token均为有效的,避免access_token过期导致调用UC API失败。
- 获取的access_token和refresh_token均存在有效期,前者有效期较短,后者较长。
- 通过 refresh_token获取的新 access_token 和 refresh_token 有效期与初次生成一致。具体获取接口参考获取访问凭证。
refresh token 有效期为 24 小时。使用refresh token再次请求获取新token时会得到新的refresh token,与此同时旧的refresh token失效。
请求消息示例
POST /open/api/v2/token HTTP/1.1
Content-Type: application/json
accept: application/json
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
timestamp: 1610544682145
nonce: aac64aa63454457294d440d8be191254
{
"grant_type": "refresh_token",
"refresh_token": "XXXXXXXXXXXX"
}
响应参数示例
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token": "[JWT TOKEN]",
"token_type": "bearer",
"refresh_token": "[JWT TOKEN]",
"expires_in": 3599,
"refresh_expires_in": 86399
}