# API 身份验证

> 使用 Tapjoy Offerwall API 时对 API 请求进行身份验证，从而管理广告系列的数据和效果。

## 申请资格##requesting-access

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

作为广告主，您可以在[广告后台](https://dashboard.tapjoy.com/reporting/api)中找到此密钥。

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

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

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

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

以下示例显示了令牌请求所需的标头。

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

以下示例显示了使用 curl 的相同请求。

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

以下示例展示了如何使用 Ruby 请求访问令牌并进行经过身份验证的 GraphQL 查询。

```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" 
} 
```
