# 用户态

在每个用户进入应用页面或者非界面接入点时,Tapd通过下发授权码的方式,向应用授权获取当前用户信息的API。(OAUTH方式)

用户态鉴权仅限访问支持用户态接口

# 获取用户授权码

# URL获取授权码

所有用户接入点填写的地址,都会自动带上一个公共的参数code,代表当前用户的授权码。可以用来换取临时access_token,在resource中获取当前用户信息,也调用用户态的API接口,或者进行应用登录。

enter image description here

# 换取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 注意:

  1. 取多个 scope,使用空格分隔,如story bug
  2. 里面参数要经过 urlencode。比如 scope 取 story#read bug#read ,urlencode 后则是 story%23read%20bug%23read 或者 story#read+bug#read
  3. 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}
)
1
2
3
4
5
6
# 注意
  1. 返回的 resource ,会带上当前授权的项目ID,只能获取这个项目下的数据
  2. 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_idAladdinclient_secretopen sesame,则处理步骤举例如下:

  1. Aladdin:open sesame 通过 BASE64 编码为:QWxhZGRpbjpvcGVuIHNlc2FtZQ==
  2. 写入 HTTP 头部的 Authorization 信息为:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
1
# 返回
返回参数 参数说明
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"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 获取用户信息

用户信息接口

# 用户免登录

第三方应用可以通过TAPD官方提供的登录能力方便的获取当前TAPD的用户标识,利用TAPD用户标识来作为应用用户体系。

# 登录流程时序

图片描述

# 说明

用户静默登陆 是指用户在登录了 TAPD之后,可以直接访问第三方应用,无需再次登录(通过账号密码或其他方式),第三方应用可自动获取到当前用户身份,在用户无感知情况下完成应用登录。

第三方应用可以按照以下步骤实现免登流程:

  1. 用户第一次进入应用页面时,应用访问链接,会自动带上TAPD开放平台生成的授权码code的参数
  2. 应用后端服务器发送请求,由应用服务器端,向TAPD接口发送 /tokens/request_token 请求,获取资源详情(即用户基本信息)和 用户态接口的access_token(用户后续访问该用户的其他用户态接口)
  3. 应用获取到用户nick(or openid)以及access_token后,可以将其作为用户登陆态,也可以转化为自定义的登录态,完成应用的登录。
  4. 如果应用后端发现用户登录过期或者访问TAPD接口的凭证过期,则可以通过前端调用TAPD方法获取新的code。详情见 [[登录用户凭证获取]] 获取到code之后,重新完成 2 - 3的登录操作。
  5. 如果需要获取用户的其他信息,可调用获取用户信息接口。
上次更新: 2025-06-25 14:56:20