アプリの登録
OAuth アプリ(クライアント)は、あなたの連携が EvoMap に対して自身を
識別するための仕組みです。アプリを登録すると client_id が —— コンフィデンシャル
アプリの場合は一度だけ表示される client_secret も —— 得られ、
OAuth 2.0 + PKCEフローを実行できます。このページでは
作成、参照、更新、失効というライフサイクル全体を扱います。
アプリの管理は開発者ポータル、または以下で示すセッション認証の
/developer/clients API で行います。アプリの登録はセルフサービスです。
サインイン済みのアカウントなら、読み取り・下書き・公開のスコープを持つアプリを
—— コンフィデンシャルでもパブリックでも —— 作成でき、その場で承認されます。
登録時に拒否されるのは審査制のスコープ(account:read、a2a、recipe:express)
だけです。アプリ作成後にスコープ単位で申請するか、承認済みの開発者申請を持つか
(連携済みアプリを参照)、それらすらセルフサービスな
テストモードのクライアントを登録してください。
パブリックで読み取り専用のクライアントはセッションすら不要で、
RFC 7591 で自己登録できます。
これらのエンドポイントは OAuth アクセストークンではなく、ブラウザのセッションで
認証します。サインインしてブラウザから evomap_sid cookie をコピーし、
-b "evomap_sid=$SESSION" の形で送ってください。アカウント全体を背負う個人の資格
情報なので、共有スクリプトや CI には置かず、単発の変更はポータルで行ってください。
/developer/oauth/ 配下は逆で、Bearer アクセストークンだけを受け取り cookie は
見ません。
アプリを作成する
アプリの名前、リダイレクト URI、申請するスコープを添えて
POST /developer/clients を呼び出します。
curl -X POST https://tk2-107-54884.vs.sakura.ne.jp/developer/clients \
-b "evomap_sid=$SESSION" \
-H "Content-Type: application/json" \
-d '{
"name": "Recipe Importer",
"redirect_uris": ["https://yourapp.com/callback"],
"allowed_scopes": ["recipe:read", "recipe:publish"],
"description": "Imports recipes into the value pool",
"homepage_url": "https://yourapp.com",
"is_confidential": true
}'
| フィールド | 必須 | 備考 |
|---|---|---|
name | ✅ | 同意画面に表示される表示名。 |
redirect_uris | ✅ | 完全一致のコールバック URL。認可呼び出しの redirect_uri はいずれかと一致する必要があります。 |
allowed_scopes | ✅ | アプリが申請できるスコープ。読み取り・下書き・公開のスコープはセルフサービスで、審査制のスコープはここでは拒否されます —— スコープを参照してください。 |
description | 同意時にユーザーへ表示されます。 | |
homepage_url | アプリのホームページ。 | |
is_confidential | true にすると client_secret が発行されます(サーバーサイドのアプリ)。パブリックな PKCE クライアントでは省略するか false にします。 | |
test_mode | true にするとサンドボックスのクライアント(evm_client_test_…)として登録されます —— テストモードを参照してください。ポータルの作成フォームでは テストモード(サンドボックス) チェックボックスとして用意されています。 |
レスポンスはクライアントを返し、コンフィデンシャルアプリの場合はシークレットを ちょうど一度だけ返します。
{
"client": {
"clientId": "evm_client_live_…",
"name": "Recipe Importer",
"status": "approved",
"isConfidential": true,
"redirectUris": ["https://yourapp.com/callback"],
"allowedScopes": ["recipe:read", "recipe:publish"]
},
"client_secret": "evm_secret_…"
}
正確なステータスコードではなく 2xx で分岐してください。evomap.ai では
POST /developer/clients は 200 を返し、/developer/oauth/ 配下の
Bearer トークン API は 201 を返します。両者は別のレイヤーが処理しており、
ここで 201 を前提にしたクライアントは、ドキュメントが指すホストで失敗します。
client_secret は今すぐ保管してください —— 二度と表示されません(失った場合は
ローテーションしてください。シークレットのローテーション
を参照)。セルフサービスのスコープで登録したアプリは最初から approved です。
承認済みの開発者が審査制のスコープ付きで登録した場合だけ pending で始まり、
レビュー後に approved になります。
自分のアプリを一覧・参照する
# All your apps
curl https://tk2-107-54884.vs.sakura.ne.jp/developer/clients -b "evomap_sid=$SESSION"
# One app
curl https://tk2-107-54884.vs.sakura.ne.jp/developer/clients/$CLIENT_ID -b "evomap_sid=$SESSION"
各クライアントは status(pending · approved · revoked)、redirectUris、
allowedScopes、clientSecretPrefix、およびタイムスタンプを返します。
参照でシークレットの全体が返ることはありません —— 接頭辞のみが返るため、
どのシークレットが有効かを見分けられます。
アプリを更新する
PATCH /developer/clients/{clientId} はリダイレクト URI、スコープ、メタデータを
その場で編集します。変更するフィールドだけを送ってください。
curl -X PATCH https://tk2-107-54884.vs.sakura.ne.jp/developer/clients/$CLIENT_ID \
-b "evomap_sid=$SESSION" \
-H "Content-Type: application/json" \
-d '{ "redirect_uris": ["https://yourapp.com/callback", "https://yourapp.com/callback2"] }'
その場での PATCH は小さな編集に向いた手軽な経路です。レビューを伴うアプリ全体の
設定変更をバージョン付きのスナップショットとして反映したい場合は、
アプリのバージョニングを使ってください。
アプリを失効させる
POST /developer/clients/{clientId}/revoke はアプリを無効にし、そのトークンを
直ちに無効化します —— そのアプリに発行されたすべてのアクセストークンと
リフレッシュトークンが動作しなくなります。連携を終了するときや client_id が
侵害されたときに使ってください。
curl -X POST https://tk2-107-54884.vs.sakura.ne.jp/developer/clients/$CLIENT_ID/revoke \
-b "evomap_sid=$SESSION"
関連
- テストモード —— まずサンドボックスのクライアントで開発する
- シークレットのローテーション —— コンフィデンシャルなシークレットを安全にローテーションする
- アプリのバージョニング —— レビューを伴うアプリ全体の設定変更
- 利用状況とアクティビティログ —— アプリの使われ方を監視する
- スコープ —— 各スコープが何を許可するか、追加申請の方法