# 获取应用身份访问凭证

> 注意：为了安全考虑，请勿将 access token 在前端使用，所有API的访问请求需要在服务端发起。

## 自建应用

### 获取流程

企业自建应用按照如下流程获获取 access token，调用服务端API获取应用资源时，需要通过access token来鉴定调用者身份，以此进行授权。

**第一步: 获取 App ID 和 App Secret**

登录[开发者后台](https://open.larksuite.com/app/)，创建企业自建应用。进入企业自建应用详情页，获取 App ID 和 App Secret。

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

**第二步: 获取 tenant_access_token**

[获取 tenant_access_token（企业自建应用）](https://open.larksuite.com/document/ukTMukTMukTM/ukDNz4SO0MjL5QzM/auth-v3/auth/tenant_access_token_internal)
> 自建应用的 app_access_token 也代表了访问本租户内的相关API及资源，故 自建应用的 app_access_token 等同于 tenant_access_token。

## 应用商店应用

由于应用商店应用会为多家企业提供服务，所以需要先获取对应企业的授权访问凭证tenant_access_token，并使用该访问凭证来调用API访问企业的数据或者资源。

> 注意：当应用新版本的权限未被管理员或者用户授权时，使用tenant_access_token 则无法调用新增权限对应的API。

### 获取流程

应用商店应用通过如下流程获取对应的 access token。调用服务端API获取应用资源时，需要通过 access token 来鉴权调用者身份进行授权。

1. 获取应用的 App ID 和 App Secret  信息
2. 获取应用的 `app_ticket`
3. 使用 App ID、App Secret 以及 `app_ticket` 获取 app_access_token
4. 获取对应企业的唯一标识的 tenant_key
5. 使用app_access_token 及 tenant_key 获取应用在企业内的授权访问凭证 tenant_access_token

<br>

**第一步: 获取 App ID 和 App Secret**

登录[开发者后台](https://open.larksuite.com/app/)，创建应用商店应用。进入应用详情页，获取App ID和App Secret。

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

<br>

**第二步: 获取应用的 app_ticket**

为了提高数据访问的安全性，对应用商店应用增加了`app_ticket`作为安全凭证。
应用商店应用需要配置事件订阅地址，Lark会每隔 1 小时向该地址自动推送`app_ticket`，应用根据接收到的 [app_ticket 事件](https://open.larksuite.com/document/uAjLw4CM/ukTMukTMukTM/application-v6/event/app_ticket-events)来获取`app_ticket`。

接收开放平台事件推送的 `app_ticket` 并保存。`app_ticket` 推送可能存在延迟，若未收到推送可通过[重新推送 app_ticket 接口](https://open.larksuite.com/document/ukTMukTMukTM/ukDNz4SO0MjL5QzM/auth-v3/auth/app_ticket_resend)触发 `app_ticket` 推送。

同时，应用也可以主动调用[重新推送 app_ticket](https://open.larksuite.com/document/ukTMukTMukTM/ukDNz4SO0MjL5QzM/auth-v3/auth/app_ticket_resend)接口，触发Lark进行及时的重新推送。

<br>

**第三步: 获取 app_access_token**

利用第一步获取的 App ID、App Secret 和 第二步获取的 `app_ticket` 获取 app_access_token。

[获取 app_access_token（应用商店应用）](https://open.larksuite.com/document/ukTMukTMukTM/ukDNz4SO0MjL5QzM/auth-v3/auth/app_access_token)

<br>

**第四步: 获取企业唯一标识 tenant_key**

**tenant_key** 为租户在Lark上的唯一标识，用来换取对应的tenant_access_token，也可以用作租户在应用里面的唯一标识，可以通过如下方式获取：
- 企业在应用商店中购买、启用应用时的应用事件及其他订阅的事件中获取
- 用户登录到小程序、H5应用或者浏览器应用时，在用户的身份信息中获取

<br>

**第五步: 获取 tenant_access_token**

使用第三步获取的 app_access_token 和 第四步获取的 tenant_key 获取 tenant_access_token。

[获取 tenant_access_token（应用商店应用）](https://open.larksuite.com/document/ukTMukTMukTM/ukDNz4SO0MjL5QzM/auth-v3/auth/tenant_access_token)

### 重新获取app_ticket

为了提高数据访问的安全性，`app_ticket` 具有一定的时效性，Lark每隔 1 小时会给应用推送一次最新的 `app_ticket`，应用也可以主动调用此接口，触发Lark进行及时的重新推送。

[重新推送 app_ticket](https://open.larksuite.com/document/ukTMukTMukTM/ukDNz4SO0MjL5QzM/auth-v3/auth/app_ticket_resend)

