Postmanを使用してZaim APIを試してみました。Zaim APIは認証方式としてOAuth 1.0を利用しているようなのですが、その認証方式の前提知識なしでPostmanにてサクッと試したい方の参考になればと思います。
Zaim APIを利用するまでの流れ
以下の流れでZaim APIの利用が開始できます。
- Zaimアプリを作成する
- Zaimアプリを使用してアクセストークンを取得する
- リクエストトークンを取得
- ユーザーとしてログインしアプリを認可する
- アクセストークンを取得
- アクセストークンを使用してZaim APIを使用する
※事前にZaimのアカウントの作成とPostmanのインストールは完了している前提です。
1. Zaimアプリの作成
Zaim APIの使用にあたり、まずアプリの作成が必要になりますので、以下の手順で作成を行います。
- Zaim Developer Center(https://dev.zaim.net/home)にログインします。
- [新しいアプリケーションを追加] を押下するとアプリの情報を入力する画面になるので、埋めていきます(基本的にいずれの項目も任意の値で大丈夫ですが、[アクセスレベル]については必要な権限のみを有効化しておくことがいいと思います)。
- アプリの登録が完了したら、追加されたアプリの情報を確認します。
以下の情報はこの後の手順で使用するので控えておきます。
- コンシューマ ID: 6f5ae0b1f7ce0944f9b28109607b949aa4ab7e97
- コンシューマシークレット: 4d37fda7bcb84d8949910ca06ee3cb0e09659641
2. アクセストークンを取得する
手順1で作成したZaimアプリを使用してアクセストークンを取得します。
2-1. リクエストトークンを取得
まず、リクエストトークン取得URL(https://api.zaim.net/v2/auth/request)を使用してリクエストトークンを取得します。Postmanで新規タブを開き、以下を入力してリクエストを送信します。
- Request URL: https://api.zaim.net/v2/auth/request (リクエストトークン取得URL)
- Method: GET
- Authorizationタブで以下を設定
- Type: OAuth 1.0
- Signature Method: HMAC-SHA1
- Consumer Key: 6f5ae0b1f7ce0944f9b28109607b949aa4ab7e97 (コンシューマIDの文字列)
- Consumer Secret: 4d37fda7bcb84d8949910ca06ee3cb0e09659641 (コンシューマシークレットの文字列)
- Callback URL: http://localhost (空欄にはできないので、任意のURLを入力)
リクエストを送信すると、レスポンスで以下が返ってきます。
oauth_token=5ra2lInLI8MkJwqD9HGY2KKrVOMLyDe3qLYgesyMLrkmr2HeVAkujRl7OyyoRAaTbiyHkSEhPw&oauth_token_secret=xUfruOQ2h9zObc1sUKoPuPZOySP968YA9gGW7sVaJohqBxJ3BRq7y7eRxcInCzY8Fqsg&oauth_callback_confirmed=true
これらの値は後続の手順で使うので控えておきます。
- oauth_token: 5ra2lInLI8MkJwqD9HGY2KKrVOMLyDe3qLYgesyMLrkmr2HeVAkujRl7OyyoRAaTbiyHkSEhPw
- oauth_token_secret: xUfruOQ2h9zObc1sUKoPuPZOySP968YA9gGW7sVaJohqBxJ3BRq7y7eRxcInCzY8Fqsg
2-2. ユーザーとしてログインしアプリを認可する
次に、認証URL(https://auth.zaim.net/users/auth)を使用して、アプリの認可を行います。ブラウザを起動し、アドレスバーに以下のURLを入力します(oauth_token
の値は、手順2-1で取得したものを使用)。
https://auth.zaim.net/users/auth?oauth_token=J6CpTLv0Ye9Axq3AwHFtM7A59TuTx61HuywUaOwjLm5N2BLBDTTHdeDprgn066ZSiQLog
すると認証を求められるので、お使いのZaimユーザーとしてログインします。
ログイン後、このようなページになります。
本来ならCallback URLに設定されたURL(私の場合はhttp://localhost)にリダイレクトされるはずなのに、なぜかされない(Zaimの不具合?)ので一見失敗したように見えますが、開発者ツールを開くと、Verifierの情報が見えるので、その情報を控えておきます。
<div class="callback">http://localhost?oauth_token=5ra2lInLI8MkJwqD9HGY2KKrVOMLyDe3qLYgesyMLrkmr2HeVAkujRl7OyyoRAaTbiyHkSEhPw&oauth_verifier=MNIet9Pqi6qrwrklpsxB8zROwr1L9aQe7Qr58KEevDs1FeYfiuMLOkvXumSlHjuPtFuNiPkjA<div class="callback_end"></div></div>
2-3. アクセストークンを取得
最後にアクセストークン取得URLを使用して、アクセストークンを取得します。Postmanでまた新たにタブを開き、以下の情報を入力してリクエストを送信します。
- Request URL: https://api.zaim.net/v2/auth/access (アクセストークン取得URL)
- Method: POST
- Authorizationタブで以下を設定
- Type: OAuth 1.0
- Signature Method: HMAC-SHA1
- Consumer Key: 6f5ae0b1f7ce0944f9b28109607b949aa4ab7e97 (コンシューマIDの文字列)
- Consumer Secret: 4d37fda7bcb84d8949910ca06ee3cb0e09659641 (コンシューマシークレットの文字列)
- Access Token: 5ra2lInLI8MkJwqD9HGY2KKrVOMLyDe3qLYgesyMLrkmr2HeVAkujRl7OyyoRAaTbiyHkSEhPw
- Token Secret: xUfruOQ2h9zObc1sUKoPuPZOySP968YA9gGW7sVaJohqBxJ3BRq7y7eRxcInCzY8Fqsg
- Callback URL: 空欄
- Verifier: MNIet9Pqi6qrwrklpsxB8zROwr1L9aQe7Qr58KEevDs1FeYfiuMLOkvXumSlHjuPtFuNiPkjA (手順2-2で取得したもの)
リクエストを送信すると、レスポンスで以下が返ってきます。
oauth_token=b2nhZHrMHjgBVA5zm2uAKZzOX5yUcIRsjDBsvaYZ1ALX60Wp97Q5LDt7zL7xCvnYTMVjhew&oauth_token_secret=xUfruOQ2h9zObc1sUKoPuPZOySP968YA9gGW7sVaJohqBxJ3BRq7y7eRxcInCzY8Fqsg
この手順で返ってきたoauth_tokenとoauth_token_secretで、ZaimのAPIを使用することができます。
- oauth_token: b2nhZHrMHjgBVA5zm2uAKZzOX5yUcIRsjDBsvaYZ1ALX60Wp97Q5LDt7zL7xCvnYTMVjhew
- oauth_token_secret: xUfruOQ2h9zObc1sUKoPuPZOySP968YA9gGW7sVaJohqBxJ3BRq7y7eRxcInCzY8Fqsg
3. Zaim APIを使用してみる
Postmanでまた新たにタブを開き、以下の情報を入力します。
- Request URL: https://api.zaim.net/v2/home/user/verify (ユーザー情報取得エンドポイント)
- Method: GET
- Authorizationタブで以下を設定
- Type: OAuth 1.0
- Signature Method: HMAC-SHA1
- Consumer Key: 6f5ae0b1f7ce0944f9b28109607b949aa4ab7e97 (コンシューマIDの文字列)
- Consumer Secret: 4d37fda7bcb84d8949910ca06ee3cb0e09659641 (コンシューマシークレットの文字列)
- Access Token: b2nhZHrMHjgBVA5zm2uAKZzOX5yUcIRsjDBsvaYZ1ALX60Wp97Q5LDt7zL7xCvnYTMVjhew (手順2-3で取得したもの)
- Token Secret: xUfruOQ2h9zObc1sUKoPuPZOySP968YA9gGW7sVaJohqBxJ3BRq7y7eRxcInCzY8Fqsg
- Callback URL: 空欄
- Verifier: 空欄
レスポンスとしてユーザー情報が返ってきます。
{
"me": {
"login": "72904a1866b2",
"input_count": 2,
"day_count": 2,
"repeat_count": 1,
"id": 8626511,
"currency_code": "JPY",
"week": 0,
"month": 1,
"active": 1,
"day": 1,
"profile_modified": "2021-11-29 07:16:06",
"name": "kojimaru",
"created": "2021-11-29 07:15:40",
"profile_image_url": "https://s3-ap-northeast-1.amazonaws.com/zaim.net/public/images/users/_default/90x90.png",
"cover_image_url": "https://s3-ap-northeast-1.amazonaws.com/zaim.net/public/images/covers/_default/90x90.png"
},
"requested": 1652588562
}
ほかのAPIエンドポイントも、同じ認証情報を使用して利用可能です。以下がデベロッパー向けのドキュメントへのリンクです(ログイン必須)。
Ref: https://dev.zaim.net/home/api
トークンの無効化
Zaim APIにはトークンを無効化するエンドポイントは用意されてない(ドキュメントには見当たらず)ようなので、UIからやる必要があるようです。私が見つけた手順は以下の通りです。
- Zaimにhttps://zaim.net/よりログインする
- ログイン後、右上の[設定]より[ソーシャルログイン]を選択する
- [Zaim で認証]以下に認証済みアプリの一覧が出てくるので、その中で対象のアプリを見つけ[無効にする]を押下する
- その後は、上記手順で払い出したトークンが利用できなくなり、APIを利用すると認証エラー(
401 Unauthorized
)になる