# API 인증

> 탭조이 오퍼월 API로 API 요청을 인증하여 캠페인 데이터와 퍼포먼스를 관리합니다.

## 액세스 요청##requesting-access

요청은 표준 2단계의 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시간이며 새로 고침할 수 없습니다. 토큰이 만료되면 리포트 API 키나, 마케팅 API 키를 사용하여 새 토큰을 요청해야 합니다.

액세스 토큰을 요청하려면 API 키를 사용하여 인증 헤더가 있는 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": "유효하지 않음" 
} 
```

## 액세스 토큰 사용##using-the-access-token

`access_token`이 있으면 API에 요청할 수 있습니다. `access_token`는 인증 헤더의 모든 요청과 함께 ‘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": "유효하지 않음" 
} 
```
