# 用户态
在每个用户进入应用页面或者非界面接入点时,Tapd通过下发授权码的方式,向应用授权获取当前用户信息的API。(OAUTH方式)
用户态鉴权仅限访问支持用户态接口
# 获取用户授权码
# URL获取授权码
所有用户接入点填写的地址,都会自动带上一个公共的参数code,代表当前用户的授权码。可以用来换取临时access_token,在resource中获取当前用户信息,也调用用户态的API接口,或者进行应用登录。
# 换取access_token
# 接入方使用过程
# 1. 拼接URL
# 格式:
https://tapd.woa.com/oauth/?response_type=code&client_id=%s&redirect_uri=%s&scope=%s&state=%s&auth_by=%s 注意:
- 取多个 scope,使用空格分隔,如
story bug
; - 里面参数要经过
urlencode
。比如 scope 取story#read bug#read
,urlencode 后则是story%23read%20bug%23read
或者story#read+bug#read
- auth_by 目前支持
user
# 示例:
https://tapd.woa.com/oauth/?response_type=code&client_id=demo&redirect_uri=http://lion.oa.com/~anyechen/code/php/oauth_demo/hey.php&scope=story%23read%20bug%23read&auth_by=user&state=random_string
# 2. 浏览器打开拼接好的 URL
# 3. 用户选项目,点“下一步”
# 4. 跳转到上面配置的跳转 URL,传递 code 参数
及授权的项目 resource 参数
,和回传 state 参数
# 例子:
http://lion.oa.com/~anyechen/code/php/oauth_demo/hey.php?code=82a65674bd67e26e034967f5d72e17e8a4b6d395&state=random_string&resource=%7B%22type%22%3A%22workspace%22%2C%22workspace_id%22%3A10022001%7D'
Array
(
[code] => dbd1206cc059dc453a8bf321d0cc1d07a7814157
[state] => random_string
[resource] => {"type":"workspace","workspace_id":10022001}
)
2
3
4
5
6
# 注意
- 返回的 resource ,会带上当前授权的项目ID,只能获取这个项目下的数据
- code 的有效期为
五分钟
# 5. 使用 code 获取 access_token
# 请求 URL
https://apiv2.tapd.tencent.com/tokens/request_token
# 请求方法
POST
# 参数要求
# POST 参数
参数 | 说明 |
---|---|
grant_type | 必须取值 authorization_code |
redirect_uri | 为配置的跳转 uri |
code | 为从链接参数上取得的 code |
# 其它参数
假设发放的 client_id
为 Aladdin
,client_secret
为open sesame
,则处理步骤举例如下:
- 将
Aladdin:open sesame
通过 BASE64 编码为:QWxhZGRpbjpvcGVuIHNlc2FtZQ==
- 写入 HTTP 头部的 Authorization 信息为:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
# 返回
返回参数 | 参数说明 |
---|---|
access_token | 访问 API 的凭据 |
expires_in | 有效时长,单位为秒 |
token_type | 凭据类型,都是 Bearer |
scope | 接口范围 |
resource | 项目权限范围 |
now | 服务器当前时间 |
# 示例
# 示例请求
curl -u "client_id:client_secret" -d "grant_type=authorization_code&redirect_uri=http://lion.oa.com/~anyechen/code/php/oauth_demo/hey.php&code=82a65674bd67e26e034967f5d72e17e8a4b6d395" "https://apiv2.tapd.tencent.com/tokens/request_token"`
# 示例返回
{
"status": 1,
"data": {
"access_token": "7152e30d9c5b1310df6be03d88d714aaf687a595",
"expires_in": 7200,
"token_type": "Bearer",
"scope": "bug story",
"resource": {
"type": "workspace",
"workspace_id": 10104801
},
"now": "2019-06-04 16:07:51"
},
"info": "success"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 获取用户信息
# 用户免登录
第三方应用可以通过TAPD官方提供的登录能力方便的获取当前TAPD的用户标识,利用TAPD用户标识来作为应用用户体系。
# 登录流程时序
# 说明
用户静默登陆 是指用户在登录了 TAPD之后,可以直接访问第三方应用,无需再次登录(通过账号密码或其他方式),第三方应用可自动获取到当前用户身份,在用户无感知情况下完成应用登录。
第三方应用可以按照以下步骤实现免登流程:
- 用户第一次进入应用页面时,应用访问链接,会自动带上TAPD开放平台生成的授权码code的参数
- 应用后端服务器发送请求,由应用服务器端,向TAPD接口发送 /tokens/request_token 请求,获取资源详情(即用户基本信息)和 用户态接口的access_token(用户后续访问该用户的其他用户态接口)
- 应用获取到用户nick(or openid)以及access_token后,可以将其作为用户登陆态,也可以转化为自定义的登录态,完成应用的登录。
- 如果应用后端发现用户登录过期或者访问TAPD接口的凭证过期,则可以通过前端调用TAPD方法获取新的code。详情见 [[登录用户凭证获取]] 获取到code之后,重新完成 2 - 3的登录操作。
- 如果需要获取用户的其他信息,可调用获取用户信息接口。