登録と設定 デベロッパ
最終更新:2026年8月16日
登録と設定
連携の前に、デベロッパポータルで OAuth / OIDC クライアント(画面上は識別子)を作成し、リダイレクト URI と権限を設定し、クライアント種別に応じた資格情報を取得してください。プロトコル連携(認可コード、トークン、同意ページなど)は、このディレクトリの「連携の概要」以降を参照してください。
2026-08-11:識別子の権限はポータルで編集できます。必須権限には理由とプライバシーポリシーが必要です。ユーザーはサインインのたびに認可を確認します。変更内容は同ディレクトリ「更新」の「2026-08-11 権限と同意のプラットフォーム更新」を参照してください。
入口
- アカウントで develop.swaymoon.com にサインインします。
- ホームの「予定リソース」から識別子を開きます(サイドバーにも同名の入口があります)。
- 左上の + をクリックし、「アプリ識別子を登録」ウィザードを開きます。
- ウィザードを順に完了します:説明 → アイコン → リダイレクト URI → 機能 → 確認。
デベロッパポータルはアカウント API(https://api-passport.swaymoon.com/api/v1/developer/...)でクライアントを管理します。操作の前にアカウントへサインインしてください。
クライアントの種類
| 種類 | clientType | 認証方式 | 向いている用途 |
|---|---|---|---|
| 機密クライアント | confidential(既定) | client_secret_basic | バックエンドで client_secret を安全に保管できる Web / サーバーアプリ |
| 非機密クライアント | public | none(PKCE のみ) | 純 HTML / 静的サイト / 純 SPA、ネイティブクライアントなど:実行時に client_secret を置かないもの |
| JWT アサーションクライアント | private_key_jwt | private_key_jwt | サーバーで EC P-256 秘密鍵を保管し、ポータルは公開鍵のみ登録。トークン交換では client_assertion を使います |
3 種類とも PKCE(S256)必須です。ユーザーは認可ページで明示的に確認してからサインインします(「以前に認可済み」でも黙ってスキップしません)。クライアント種類は作成後相互に変更できません。
JWT アサーションとは
private_key_jwt は OAuth 2.0 / OpenID Connect のクライアント認証方式です(RFC 7523)。トークン交換時、サーバーが保管する秘密鍵で短命な JWT(client_assertion)に署名し、アカウントはポータルに登録した公開鍵で検証します。機密クライアントであることに変わりはありません。秘密鍵はサーバーから出してはいけません。身分証明の材料が「共有の client_secret」から「非対称鍵」に変わるだけです。
| 比較 | 機密(client_secret_basic) | JWT アサーション(private_key_jwt) | 非機密(none) |
|---|---|---|---|
| 向いている用途 | バックエンドがあり、共有シークレットを保管できる | バックエンドがあり、ポータルに秘密鍵を見せたくなく、kid でローテーションしたい | SPA / 静的サイト / ネイティブ:実行時にシークレットを置けない |
| ポータルが保存するもの | client_secret の平文は再表示しない | 公開鍵のみ | シークレットなし |
| トークン交換 | HTTP Basic + PKCE | client_assertion + PKCE | フォームの client_id + PKCE |
| Refresh Token | あり | あり | なし |
JWT アサーションを選ぶ:サーバーアプリで、長期の client_secret を環境変数に置きたくない、または無停止で鍵をローテーションしたいとき。
選ばない:純ブラウザ SPA、秘密鍵を保管できない静的サイト。非機密クライアントを使ってください。
client_assertion に必要なクレームとリクエスト形式は「認可コードと PKCE」「例とトラブルシューティング」を参照してください。
ウィザードの項目
| 手順 | 項目 | 説明 |
|---|---|---|
| 説明 | 説明、クライアント種類、公開鍵 JWK | 「説明」は同意ページに出るアプリ名です。種類は上表(編集時は種類が読み取り専用)。JWT アサーションでは EC P-256 の公開鍵 JWK(kid 必須)を貼り付けます |
| アイコン | 既定アイコン、またはアップロードして切り抜き | 同意ページに表示。既定はアプリ名の先頭文字から生成できます。JPEG / PNG / WebP をアップロードし、約 512×512 の正方形 JPEG に切り抜けます(512KB 以下) |
| リダイレクト URI | Redirect URI の許可リスト | 認可の成功またはキャンセル後、ユーザーのブラウザが戻るアドレス。少なくとも 1 件。認可リクエストの redirect_uri と完全一致が必要です(複数追加可)。ローカルでは http://127.0.0.1 を使えます |
| リダイレクト URI | データ削除コールバック URL(任意) | ユーザーがデータ削除を求めたとき、アカウントのサーバーが署名付きペイロードを POST するアドレス(ブラウザ遷移ではありません)。後述の「データ削除コールバック URL」を参照 |
| リダイレクト URI | プライバシーポリシーのリンク | 同意ページと「アプリの認可」詳細で見えます。クリック前に、そのドメインが Swaymoon の管理下にない旨が表示されます。openid 以外の必須権限を申請するときは必須です。後述の「プライバシーポリシーのリンク」を参照 |
| 機能 | 必須 / 任意の scope と理由 | 新規・編集どちらでも設定できます。openid は常に必須。email とプロフィール細目は必須・任意・申請なしにできます。必須にするときはユーザーに見える理由とプライバシーポリシーが必要です。「権限と同意」を参照 |
| 確認 | — | 新規は「登録」。編集は「保存」で名称 / アイコン / コールバック / データ削除 URL / プライバシーポリシー / 権限と理由を更新 |
作成結果
機密クライアント
| 項目 | 説明 |
|---|---|
client_id | swm_ で始まるクライアント識別子。認可 URL に公開して構いません |
client_secret | 作成時またはローテーション時に一度だけ表示されます。すぐにシークレット管理へ保存してください。紛失したら識別子の詳細からローテーションでき、削除して作り直す必要はありません |
設定の要点:
- 認証方式:
client_secret_basic - 認可タイプ:
authorization_code、refresh_token - Access Token は約 5 分;Refresh Token は約 180 日(更新後は古い Refresh Token を再利用しません)
非機密クライアント
| 項目 | 説明 |
|---|---|
client_id | swm_ で始まるクライアント識別子 |
client_secret | 発行されません |
設定の要点:
- 認証方式:
none - 認可タイプ:
authorization_codeのみ(refresh_tokenは発行しません。Access Token 期限切れ後は認可コードフローをやり直します) - Access Token は約 5 分
- トークン交換時はリクエスト本文に
client_idとcode_verifierを送ります。HTTP Basic は使わないでください - 実行できる連携は「Python の最小実行例」。AI 支援は「生成 AI で機密クライアントを連携する」「生成 AI で非機密クライアントを連携する」
JWT アサーションクライアント
| 項目 | 説明 |
|---|---|
client_id | swm_ で始まるクライアント識別子 |
client_secret | 発行されません |
公開鍵 kid | 作成時に登録した EC P-256 公開鍵の識別子。詳細ページから追加登録してローテーションできます |
設定の要点:
- 認証方式:
private_key_jwt(client_assertion+ ES256) - 認可タイプ:
authorization_code、refresh_token - Access Token は約 5 分;Refresh Token は約 180 日
- トークン交換時は
client_id、code_verifier、client_assertionを送ります。HTTP Basic は使わないでください - 秘密鍵はサーバー側に残します。ポータルは秘密鍵 JWK を拒否します
リダイレクト URI(Redirect URI)の規則
- 空でない URI を少なくとも 1 件指定してください。
- 認可リクエストの
redirect_uriは登録値と1 文字単位で一致する必要があります(scheme、host、port、path、query を含む)。 - Redirect URI に
#fragmentを使わないでください(プロトコルで禁止)。 - 本番では
https://を強く推奨します。ローカル開発ではhttp://127.0.0.1:...などのループバックを使えますが、サーバーの検証方針に従ってください。 - ワイルドカードドメインは使えません。環境ごとに対応する URI を登録してください。
http://127.0.0.1とhttp://localhostは別アドレスです。- 誰がアクセスするか:認可完了後、ユーザーのブラウザがここに遷移します。
http://127.0.0.1:8766/callbackを登録すれば、ブラウザとローカル demo が同一マシンならログインコールバックが届きます。
データ削除コールバック URL
任意です。ユーザーがアカウントのプライバシーセンターで「取り消しとデータ削除のリクエスト」を選ぶと、アカウントは次を行います:
- そのアプリへの認可を取り消す;
- アプリ担当者の紐づけメールへ説明メールを送る;
- この URL が設定されていれば、アカウント API プロセスが動いているマシンからその URL へ
POSTします(署名の取り決めは「権限と同意」)。
| 項目 | 説明 |
|---|---|
| 必須か | いいえ。未設定ならメールのみで、HTTP コールバックは送りません |
| 許可する URL | アカウントのサーバーから到達できる https://… のみ |
| 禁止 | 任意の http://、127.0.0.1、localhost、::1 などのループバック |
| 誰がアクセスするか | Passport サーバーであり、ブラウザではありません(ログイン用 loopback Redirect を流用しないでください) |
| ローカル連携 | ngrok、Cloudflare Tunnel などでローカル受信端を HTTPS に公開し、トンネル URL をここに登録します。削除を押すときはトンネルと受信端が稼働している必要があります |
| Redirect との違い | ログイン Redirect は引き続き http://127.0.0.1 を使えます(ブラウザ遷移)。削除コールバックとログインコールバックは別経路です |
| 署名鍵 | 機密:作成時またはローテーション時に渡される client_secret の平文。非機密 / JWT(コールバック設定済み):作成時またはローテーション時に渡される webhookSecret。生の body を検証してください。「権限と同意」を参照 |
実行できる連携は、「Python の最小実行例」の機密クライアント節「データ削除コールバックのデモ」です。
プライバシーポリシーのリンク
任意です。登録後、ユーザーは次から閲覧・オープンできます:
- 認可の同意ページ(設定済みの場合);
- アカウント プライバシー → アプリの認可 → アプリ詳細;
ジャンプ前に、アカウントは次を表示します:このドメインは Swaymoon の管理下にありません。その内容は Swaymoon が管理していません。
| 項目 | 説明 |
|---|---|
| 必須か | openid 以外の必須権限を申請するときは必須。それ以外は任意 |
| 許可する URL | 公開 https://…。ローカル連携では http://127.0.0.1 / http://localhost も可(https:// も可) |
| 禁止 | ループバック以外のホストへの http:// |
| 誰がアクセスするか | ユーザーのブラウザ(ログイン Redirect と同じ。サーバーからの送信ではありません) |
| API フィールド | 作成 / 更新クライアントのリクエスト本文の privacyPolicyUri |
本番公開前に、誰でも開ける HTTPS のプライバシーポリシーページを用意し、認可前にデータの扱いを説明できるようにしてください。
権限の推奨
| 要件 | 推奨 scope |
|---|---|
| サインインのみ、ローカルアカウント作成 | openid |
| 呼び方を表示したい | openid + name(必要なら nickname / picture。任意または必須) |
| 連絡用メールが必要 | openid + email(ポータルで必須または任意。任意のときはキャンセルを尊重) |
| このアプリにユーザー名を保存したい | openid + preferred_username(必須にする場合は理由とプライバシーポリシーが必要) |
openid は常に必須です。email やプロフィール細目を必須にするときは、ユーザーに見える理由とプライバシーポリシーのリンクが必要です。任意権限は同意ページで既定チェック、ユーザーは外せます。「権限と同意」を参照してください。
管理操作
- 一覧:作成済み識別子、名称、
client_id、クライアント種類と認証方式、必須 / 任意権限を確認します。 - 詳細:コールバック、プライバシーポリシー、権限、webhook シークレットの発行有無、JWT 公開鍵
kidを確認します。 - 編集:説明(名称)、アイコン、リダイレクト URI、データ削除コールバック URL、プライバシーポリシーのリンク、必須 / 任意権限と必須権限の理由を変更できます。
- シークレットのローテーション:機密クライアントは詳細ページで
client_secretをローテーションできます(削除コールバックの署名鍵も更新されます)。非機密 / JWT はwebhookSecretを発行またはローテーションできます。 - 公開鍵の追加:JWT アサーションクライアントは詳細ページから別の公開鍵(
kid)を追加でき、無停止でローテーションできます。 - 編集不可:クライアント種類(機密 / 非機密 / JWT アサーション)は作成後固定です。種類を変えるには古い識別子を削除して再登録し、アプリ内の設定を更新してください。
- 削除:識別子を削除すると、発行済みトークンはそのクライアントで使えなくなり、ユーザー側の認可関係も無効になります。
互換の案内:すでに本番運用中の古いクライアントは、プラットフォームが「編集可能な権限 / 必須の認可確認」に対応したからといってコード変更は不要です。新規クライアントは最新ドキュメントに従ってください。「権限と同意」を参照。
クライアント作成は POST /api/v1/developer/clients を呼び、JSON 本文に clientType、requiredScopes / optionalScopes、scopeReasons、任意の dataDeletionUri、privacyPolicyUri を渡します。既存クライアントの更新は PUT /api/v1/developer/clients/{clientId}(権限と理由を更新できます)。
次のステップ:同ディレクトリの「連携の概要」を読み、「認可コードと PKCE」を実装してください。