# API 身份验证

> 使用 Tapjoy Offerwall API 时对 API 请求进行身份验证，从而获得授权访问权限来管理用户参与度和变现数据。

## 申请资格##requesting-access

这些请求通过标准的双边 OAuth2 流程完成身份验证：先用编码后的 API 密钥来请求 `access_token`，然后用获得的 `access_token` 对后续请求进行身份验证。

您可以在 [LTV 后台](https://ltv.tapjoy.com/)中选择 App（应用）> Settings（设置）> App Settings（应用设置）> 向下滚动 > API Keys（API 密钥）找到 API 密钥。

![在 Offerwall（提供墙）后台中显示的营销 API 密钥。](/api/media?file=/grow/media/images/api_key.png)

访问令牌的有效生命周期为 1 小时，无法刷新。当令牌到期时，必须使用 Reporting API 密钥/Marketing API 密钥来请求新的令牌。

要请求访问令牌，必须使用 API 密钥发送带有 Authorization 标头的 POST 请求。如果凭据有效，则响应中将包含一个访问令牌以及令牌到期时间（以秒为单位）。

### 请求示例##example-request

以下示例展示了如何使用原始 HTTP、curl 和 Ruby 来请求访问令牌。

1. **Raw**

   ```graphql
   POST /v1/oauth2/token 
   Host: api.tapjoy.com 
   Authorization: Basic <API Key>
   Accept: application/json
   ```

2. **Curl**

   ```curl
   curl -H "Authorization: Basic <API Key>" -X POST https://api.tapjoy.com/v1/oauth2/token
   ```

3. **Ruby**

   ```ruby
   require 'json'
   require 'net/https'

   access_token = "<OAuth Token>"

   query = <<~END
   query {
     user {
       firstName
     }
   }
   END
   json = JSON.dump({query: query})

   http = Net::HTTP.new('api.tapjoy.com', 443)
   http.use_ssl = true

   request = Net::HTTP::Post.new('/graphql')
   request['Authorization'] = "Bearer #{access_token}"
   request.body = json
   response = http.request(request)

   result = JSON.parse(response.body)
   data = result['data']
   errors = result['errors']
   ```

### 成功响应##successful-response

成功请求返回 200 状态，其中包含访问令牌及其过期持续时间（以秒为单位）。

```graphql
status 200 
{ 
"access_token": "token_string",
"token_type": "bearer",
"expires_in":3600,
"refresh_token": null 
} 
```

### 响应不成功##unsuccessful-response

如果 API 密钥无效或缺失，则请求返回 401 状态。

```graphql
status 401
{ 
"error":"Unauthorized" 
} 
```

## 使用访问令牌##using-the-access-token

获得 `access_token` 后，即可向 API 发出请求。每个`access_token`都需要在 Authorization 标头中包含“Bearer”类型的 。如果 `access_token` 已过期或不存在，则响应的状态将是 401 Unauthorized（未经授权）。

### 请求示例##example-request

以下示例显示了经过身份验证的 API 请求所需的标头。

```curlrc
POST /v4/audiences 
Host: api.tapjoy.com 
Authorization: Bearer <token_string> 
Accept: application/json
```

### 令牌缺失或无效令牌响应##missing-or-invalid-token-response

如果访问令牌丢失或已过期，则请求返回 401 状态。

```curlrc
status 401 
{ 
"error":"Unauthorized" 
} 
```
