# OAuth API
## OAuth認証機能の利用手順
Zaifのアカウント情報を利用したサービス(以下クライアントサービス)を展開する業者(以下クライアント)がOAuth認証機能を利用できるようにするための手順を記述します。
### 1.サービス基本情報の登録
Zaifにログインし、『アカウント』→『連携アプリケーション基本設定』から「連携アプリケーションの情報を新しく作成する」ボタンを押下し、サービスの詳細な情報を設定してください。
```eval_rst
.. image:: ./img/oauth_slideshow_1.png
```
```eval_rst
=============================== ======= ====================================================================================================================== ==========================================
項目名 必須 詳細 入力例
=============================== ======= ====================================================================================================================== ==========================================
名称 Yes クライアントが各設定を見分けるための名称です。 自動取引BOT設定
リダイレクトURI No\※1 認可クリア後、必要なパラメータを受け取るためのリダイレクトURL設定してください。**設定することを強く推奨しています。** https://auto.bot.co.jp/zaif_oauth
サービス名称 Yes サービスの名称を設定してください。 自動取引BOT
サービスイメージURL No サービスのイメージ画像のURLを設定してください。 https://auto.bot.co.jp/service_image.png
サービスURL No サービスのURLを設定してください。 https://auto.bot.co.jp/
サービス利用規約URL No サービスの利用規約のURLを設定してください。 https://auto.bot.co.jp/terms
サービスプライバシーポリシーURL No サービスのプライバシープリシーのURLを設定してください。 https://auto.bot.co.jp/policy
=============================== ======= ====================================================================================================================== ==========================================
```
``` note::
※1 未設定の場合、後述する認可画面リダイレクトパラメータに指定されるredirect_uriが利用されます。
```
### 2.Zaifアカウント認可画面へのリダイレクト
クライアントサービスのログイン画面等に、Zaifアカウント認可画面 (https://zaif.jp/oauth) へ必要なパラメータを追加してリダイレクトを行えるようにしてください。
```eval_rst
=============== ======== ============================================================================================================= ==========================================
項目名 必須 詳細 入力例
=============== ======== ============================================================================================================= ==========================================
client_id Yes 連携アプリケーション基本情報登録時に発行されるIDを指定してください。 a3823d2a30f24e39980ebe7943b55737
response_type Yes 固定 code
scope Yes 認可したい機能を半角空白(エンコード時は%20)で区切って指定してください、詳細は下記scope詳細をご確認ください。 info%20trade
state Ye リダイレクトするたびに一意の文字列を指定してください。 2a99cc45cef04c358dbc26db880f9d03
redirect_uri No\※1 発行されたcode(後述)を取得するためのリダイレクト先を指定してください。 http://your_domain/zaif_redirect
lang No\※2 表示言語を明示的に指定したい場合に指定してください。 en
=============== ======== ============================================================================================================= ==========================================
```
``` note::
※1未指定の場合はサービス基本情報登録時に指定したリダイレクトURLが使用されます。
※2未指定の場合ブラウザの言語設定を参照して自動で言語情報を切り替えます。
```
**scope詳細**
```eval_rst
======== ================ =======================================================================================
名称 詳細 補足
======== ================ =======================================================================================
info データ参照
trade 通貨のトレード
withdraw 口座への引き出し すべてのクライアントが指定できるわけではありません。詳しくはサポートまでご連絡ください。
======== ================ =======================================================================================
```
リダイレクトに成功すると、下記のような認証画面が表示されます。
```eval_rst
.. image:: ./img/oauth_slideshow_2.png
```
### 3.リダイレクトされた情報の解析
サービス利用ユーザ(以下ユーザ)が認証に成功すると、指定したリダイレクトURLにリクエストが発行されるので、パラメータを解析し、認可処理を行ってください。
```eval_rst
====== ================================================================================================================ =================================
キー 詳細 例
====== ================================================================================================================ =================================
code Zaifが発行した一意の文字列です。後述のトークン発行時に利用します。 cb533e906a984b0e8ba4efae3af0c7cb
state リダイレクト時に付与したstateパラメータと同値です。成りすまし対策として、必ず同値であるかチェックしてください。 2a99cc45cef04c358dbc26db880f9d03
====== ================================================================================================================ =================================
```
### 4.トークン発行リクエスト
前述のcodeパラメータを使って、tokenが取得できるWeb APIを実行し、tokenを取得します。なお、戻り値はJSONになります。
* エンドポイント:https://oauth.zaif.jp/oauth/v1/token
* メソッド:POST
**トークン発行APIパラメータ**
```eval_rst
============== ======= ===================================================================== =======================================================================================
パラメータ 必須 詳細 例
============== ======= ===================================================================== =======================================================================================
grant_type Yes 固定 authorization_code
code Yes code リダイレクトされたcode値を指定してください。
client_id Yes 9r88i445cef04c358dbc26db880f9d03 アプリケーション基本情報登録時に発行されたクライアントIDを指定してください。
client_secret Yes 2a99cc45cef04c358dbc26db880f9d03 アプリケーション基本情報登録時に発行されたクライアントシークレットを指定してください。
redirect_uri No\※1 http://your_domain/zaif_redirect リダイレクトしたいURLを指定してください。
============== ======= ===================================================================== =======================================================================================
```
``` note::
※1 認可画面リダイレクト時に指定している場合必ず同値を指定してください。
```
**トークン発行API戻り値**
```eval_rst
============= ========================================================== =================================
キー 詳細 例
============= ========================================================== =================================
token_type 固定 bearer
state リダイレクト時に付与したstateパラメータと同値です。 2a99cc45cef04c358dbc26db880f9d03
access_token APIを利用する時に指定するトークンです。 bb12f3de5df2472290ff15331824a9cf
refresh_token 利用期限が切れたaccess tokenを再発行するために使用します。 ef972ad13e484e17abffbfd5dba51750
expires_in access tokenの期限です。単位は秒です。 3600
============= ========================================================== =================================
```
### 5.API実行
今までHTTPヘッダにkey、signパラメータを付与して実行していた取引APIですが、取得したtokenを利用すればそれらは必要なくなります。 発行されたaccess tokenをtokenパラメータとしてリクエスト発行時にHTTPヘッダに付与し、APIを実行して下さい。
### 6.access tokenの期限が切れた場合
期限が切れたaccess tokenは利用できなくなります。下記tokenの再発行Web APIを利用して、token を再発行して下さい。
* エンドポイント:https://oauth.zaif.jp/oauth/v1/refresh_token
* メソッド:POST
**トークン再発行APIパラメータ**
```eval_rst
============= ==== ====================================================================================== =================================
パラメータ 必須 詳細 例
============= ==== ====================================================================================== =================================
grant_type Yes 固定 refresh_token
refresh_token Yes トークン発行API実行時に取得したrefresh tokenを指定してください。 ef972ad13e484e17abffbfd5dba51750
client_id Yes アプリケーション基本情報登録時に発行されたクライアントIDを指定してください。 9r88i445cef04c358dbc26db880f9d03
client_secret Yes アプリケーション基本情報登録時に発行されたクライアントシークレットを指定してください。 2a99cc45cef04c358dbc26db880f9d03
============= ==== ====================================================================================== =================================
```
**トークン再発行API戻り値**
```eval_rst
============= ========================================================== ================================
キー 詳細 例
============= ========================================================== ================================
token_type 固定 bearer
access_token APIを利用する時に指定するトークンです。 bb12f3de5df2472290ff15331824a9cf
refresh_token 利用期限が切れたaccess tokenを再発行するために使用します。 ef972ad13e484e17abffbfd5dba51750
expires_in access tokenの期限です。単位は秒です。 3600
============= ========================================================== ================================
```
### 補足
* ユーザが認証したアプリケーションの情報を削除したい場合は、『アカウント』→『連携アプリケーション一覧』を選択し、削除したいアプリケーション情報の削除ボタンを押下してください。