成员身份验证
成员身份验证
OAuth2简介
如流平台提供了OAuth的授权登录方式,可以使如流客户端(移动端或者桌面端内嵌打开)打开的网页获取成员的身份信息,从而免去登录环节。 企业应用中的URL链接(包括自定义菜单或者消息中的链接),均可通过OAuth2.0验证接口来获取成员的身份信息(UserId)。
第一步:构造网页授权链接
获取用户在如流客户端打开应用(或者链接)时的用户身份,如流提供两种方法:
方法一:快速获取code
当用户在如流应用中心打开应用首页时,如流客户端会在发出请求时,在header中的hicode字段加上客户端生成的code(ios.xxx.xxx形式),应用方服务端使用此code请求后续接口获取用户身份;若从header中没有获取到hicode字段,或者使用hicode获取用户信息失败,还请降级到方法二。
方法二:常规获取code
构造如下链接来获取code参数:
请求地址:https://xpc.im.baidu.com/oauth2/authorize?appid=CORPID&redirect_uri={REDIRECT_URI}
参数说明:
参数 | 类型 | 参数位置 | 是否必须 | 说明 |
---|---|---|---|---|
appid | String | Url参数 | 是 | 授权方CorpID,参考获取企业授权信息 |
redirect_uri | String | Url参数 | 是 | 授权后重定向的回调链接地址,请使用urlencode对链接进行处理,例如http://localhost:8080/index.html |
员工在如流客户端点击后,页面将跳转至 redirect_uri?code=CODE,企业可携带code参数请求获取访问用户身份接口获得员工的userid。code长度最大为512字节。
第二步:获取访问用户身份
请求方式:GET(HTTPS)
请求地址:https://api.im.baidu.com/api/user/getuserinfo?access_token={ACCESS_TOKEN}&code={CODE}&agentid={AGENTID}
参数说明:
参数 | 类型 | 参数位置 | 是否必须 | 说明 |
---|---|---|---|---|
access_token | String | Url参数 | 是 | 调用接口凭证,参考获取企业凭证 |
code | String | Url参数 | 是 | 通过网页授权链接获取到的code,最大为512字节。每次成员授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期 |
agentid | Integer | Url参数 | 是 | 跳转链接时所在的企业应用ID |
权限要求:管理员须拥有应用的使用权限;agentid必须和跳转链接时所在的企业应用ID相同。
正常返回结果:
{
"errcode": 0,
"errmsg": "ok",
"UserId": "USERID"
}
参数说明:
参数 | 说明 |
---|---|
UserId | 用户在企业内的UserID |
异常返回结果:
{
"errcode": "40029",
"errmsg": "invalid code"
}
参数说明:
errcode | errmsg |
---|---|
40029 | 不合法的oauth_code |
42003 | oauth_code超时或者失效 |
40056 | 不合法的agentid |
60011 | 管理员权限不足 |
60014 | 客户端code认证失败 |
缓存方案建议
通过OAuth2.0验证接口获取成员身份会有一定的时间开销。对于频繁获取成员身份的场景,建议采用如下方案:
- 配置应用的访问地址为目标页面地址;
- 用户访问应用地址时,目标页面首先通过自行生成的cookie识别用户身份;
- 若用户身份识别失败,则重定向到OAuth验证链接,获取成员的身份信息后,应用方重新设置标识用户身份的cookie信息(为了安全,设置的cookie建议加密);
- 目标页面上的后续请求通过cookie识别用户身份。