連携の概要 デベロッパ
最終更新:2026年8月16日
連携の概要
Swaymoon アカウントで、サイトやアプリにサインインを連携できます。Swaymoon アカウントは OAuth 2.1 と OpenID Connect に準拠した IdP です。ユーザーが公式ドメインでサインインと認可を終えると、アプリは認可コードをトークンに交換し、ユーザー情報を読めます。
このページは「Swaymoon デベロッパ」→「ガイド」→「識別子」にあります。クライアントの登録と管理は デベロッパポータル を使い、同ディレクトリの「登録と設定」を先に読んでください。
デベロッパ向けドキュメントを見るには、ドキュメントサイト右上のデベロッパモードをオンにしてください。
ドキュメント一覧
この「識別子」ディレクトリ:
| ドキュメント | 内容 |
|---|---|
| 「登録と設定」 | デベロッパポータルで識別子を作成し、リダイレクト URI、任意のプライバシーポリシー URL、権限、シークレット(ある場合)を設定する |
| 「認可コードと PKCE」 | ブラウザ認可の開始、トークン交換、リフレッシュ |
| 「トークンとユーザー情報」 | ID Token、Access Token、JWKS、UserInfo、sub |
| 「権限と同意」 | scope、同意ページ、必須と任意の権限 |
| 「例とトラブルシューティング」 | curl 断片、よくあるエラーコード、チェックリスト |
| 「生成 AI で機密クライアントを連携する」 | サーバーがあるとき、AI で機密クライアント連携コードを生成する |
| 「生成 AI で非機密クライアントを連携する」 | フロントエンドのみ / 静的サイトのとき、AI で非機密クライアント連携コードを生成する |
| 「Python の最小実行例」 | 同一ページに public と confidential の PKCE demo。既定ですべてのプロフィール権限を求め、認可確認ページを表示。JWT アサーションのトークン交換は「認可コードと PKCE」と「例とトラブルシューティング」 |
環境とエンドポイント
| 用途 | 本番 |
|---|---|
| ユーザーのサインイン / 同意ページ | https://passport.swaymoon.com |
| Issuer(OIDC API) | https://api-passport.swaymoon.com |
| デベロッパポータル | https://develop.swaymoon.com |
| ディスカバリ文書 | https://api-passport.swaymoon.com/.well-known/openid-configuration |
ローカル連携では Issuer は多くの場合 http://127.0.0.1:10001 です。実際の値は環境変数に従ってください。常にディスカバリ文書の URL を正として扱い、変わりうるパスをハードコードしないでください。
よく使うプロトコルエンドポイント(接頭辞は Issuer):
| エンドポイント | パス |
|---|---|
| 認可 | /oauth2/authorize |
| トークン | /oauth2/token |
| JWKS | /oauth2/jwks |
| UserInfo | /userinfo |
| 取り消し | /oauth2/revoke |
| イントロスペクション | /oauth2/introspect |
ID Token の署名は ES256(楕円曲線)です。ポータルは 3 種類のクライアントをサポートし、いずれも PKCE 必須(S256)です:
| 種類 | 認証方式 | トークン交換 | Refresh Token |
|---|---|---|---|
| 機密クライアント | client_secret_basic | HTTP Basic + code_verifier | あり(約 180 日) |
| 非機密クライアント | none | 本文 client_id + code_verifier | なし(期限切れ後は再認可) |
| JWT アサーションクライアント | private_key_jwt | client_assertion + code_verifier | あり(約 180 日) |
推奨する連携手順
sequenceDiagram
participant App as あなたのアプリ
participant Browser as ユーザーのブラウザ
participant Passport as アカウント
App->>Browser: 302 で認可エンドポイントへ(PKCE 付き)
Browser->>Passport: サインイン(必要な場合)
Browser->>Passport: 権限に同意
Passport->>Browser: 302 で redirect_uri?code= へ
Browser->>App: authorization code を渡す
App->>Passport: POST token(code + verifier。機密は Basic、JWT は client_assertion も)
Passport->>App: access_token + id_token(機密と JWT は refresh_token も)
App->>Passport: GET UserInfo
Passport->>App: ユーザークレーム
- デベロッパポータル で「登録と設定」に従い識別子を登録し、機密、非機密、または JWT アサーションを選びます。機密クライアントは一度だけ表示される
client_secretを安全に保管してください。JWT アサーションは公開鍵だけをポータルへ提出し、秘密鍵はサーバーに残します。 - 「認可コードと PKCE」に従い認可コードフローを実装します(PKCE 必須)。
id_tokenを検証し(Issuer、audience、署名、有効期限)、Access Token で UserInfo を呼び出します。- アカウントが返す
subを自前ユーザーの主キーにします(pairwise。詳細は「トークンとユーザー情報」)。
設計の要点(先に読む)
- 認可コード + PKCE:ポータルアプリは
code_challengeを省略できません。 - 機密クライアント:トークン交換時は HTTP Basic(
client_id/client_secret)を使い、あわせてcode_verifierを送ります。 - 非機密クライアント:
client_secretはありません。トークン交換時はフォームにclient_idとcode_verifierを送ります。「あることにしたシークレット」をフロントに書かないでください。「生成 AI で非機密クライアントを連携する」と「Python の最小実行例」を参照。 - JWT アサーションクライアント:
client_secretはありません。トークン交換時はフォームにclient_id、code_verifier、秘密鍵で署名したclient_assertion(ES256)を送ります。ポータルは公開鍵だけを保存します。秘密鍵はアップロードせず、フロントにも置かないでください。概念と取捨は「登録と設定」、リクエスト形式は「認可コードと PKCE」を参照。 - 同意ページ:ユーザーは毎回認可ページで明示確認します(黙ってスキップしません)。
openidは常に必須。emailとプロフィール細目は必須・任意・申請なしにできます。必須にするときはポータルで理由とプライバシーポリシーが必要です。権限が変わると、ユーザーは追加 / 削減の対照を見ます。すでに本番の古いクライアントはこのためコードを変えなくて構いません。新規クライアントは最新の「権限と同意」に従ってください。 - Pairwise
sub:同一ユーザーでもデベロッパチームが違えばsubは異なり、各チーム内では安定します。メールを唯一の主キーにしないでください。 - メールクレーム:
emailが付与されているとき、UserInfo は連絡可能なメールを返します。ユーザーは通常メールかプライバシーメール(中継アドレス。実メールは渡されません)を選べます。どちらも通常メールとして扱ってください。アカウントの主キーはsubです。
コンプライアンスとブランド
- サインインと認可は公式アカウントドメインへ遷移させてください。偽のログインページを自作してパスワードを集めないでください。
- 業務に必要な最小の
scopeだけを要求してください。 - アカウントとデベロッパポータルの「利用規約」「濫用防止ポリシー」を守ってください。デベロッパ連携の問い合わせは hello@swaymoon.com です。
次のステップ:「登録と設定」のあと、「認可コードと PKCE」を実装してください。