# 访问凭证：我是谁？

通过以上两个部分的介绍，我们了解了Lark的应用在设计开发时受**权限**和**可用性**两个维度的管控。在获得合适的权限之后，应用就可以通过Lark的 OpenAPI 或者 SDK 接口进行数据通信了。

**鉴权方式**就是在调用接口时，告知Lark的服务器“当前是谁在访问这个接口”。换言之，就是让Lark了解“现在是谁、以什么身份获取什么租户的数据”。

## 凭证类别

Lark接口的访问凭证有以下三类：

-   `tenant_access_token` **:** 租户授权凭证。通过该凭证，应用会使用自己的帐号去执行对应的操作，比如获取一个通讯录用户的信息。该凭证的值以`t-`为前缀，如：`t-24b5bf4e054bcef00b2af38a0b04f0af6d315b18`

-   `app_access_token` **:** 应用授权凭证。开放平台可据此识别调用方的应用身份，应用可以访问应用自身相关的信息，不归属到具体的企业或者用户，比如获取当前登录应用的用户身份。该凭证的值以 `a-`或者`t-` 为前缀，如：`a-24b5bf4e054bcef00b2af38a0b04f0af6d315b18`
注意：在实际使用中，接口返回的`app_access_token`和`tenant_access_token`有可能是一样的。这是由于`app_access_token`的使用场景比较少，Lark开放平台正在逐步统一这两个凭证。
-   `user_access_token` **:** 用户授权凭证。通过该凭证，应用将代表用户执行对应的操作，比如通过接口创建一篇云文档或者一个日程。该凭证的值以`u-`为前缀，如：`u-Lr1RT7S8fJUES03mT5FtWf`

使用访问凭证时，需要在调用接口时将其填入到 HTTP 请求的请求头参数中。每个 Open API 的接口中都声明了该接口需要的访问凭证类型和获取方式。

![](//sf16-sg.larksuitecdn.com/obj/open-platform-opendoc-sg/4e63d3e191e53d643308c8ee10aaacea_RiNizvjA1H.png)

*(图10: 服务器接口中的凭证说明)*

<br>

关于Lark访问凭证的更多信息，可以参考[API访问凭证概述](https://open.larksuite.com/document/ukTMukTMukTM/uMTNz4yM1MjLzUzM)。在正式开始开发之前，我们建议开发者该对Lark的访问凭证机制有充分的了解。

> 注意：凭证应放在 HTTP 请求头中，且该值需要增加 '`Bearer<空格>`' 前缀，如下图所示：

![](//sf16-sg.larksuitecdn.com/obj/open-platform-opendoc-sg/f07a73f26a8fb0c28798765d4bdd9407_rYsZL2xvUV.png)

*(图11: 访问凭证在请求中的示意)*

<br>

用 cURL 示例代码表示如下：

```bash
curl --location --request GET 'https://open.larksuite.com/open-apis/contact/v3/departments/od-64242a18099d3a31acd24d8fce8d9f9c' \
--header 'Authorization: Bearer t-5888bcb7c421a695ca83c449caba5c0b12becfda' \
--header 'Content-Type: application/json; charset=utf-8' 
```

-   **关于凭证的过期机制**

访问凭证是有有效期的，所以开发者需要在自己的服务端及时刷新凭证，以防止过期。每次生成的凭证最长有效期是 7200 秒（2 个小时）；如在前 1.5 小时之内重新获取凭证，则会拿到与原值相同的值，但是每次返回的剩余有效时间（`expire`）则会发生变化，如下所示：

![](//sf16-sg.larksuitecdn.com/obj/open-platform-opendoc-sg/27715420288e32dfbfd58c6fe864fbf6_5Kxso4nV27.png)
*(图12: 访问凭证的过期时间)*

<br>
