プロジェクトでは、Google、Apple、GitHub、Microsoft のサインインを有効にできます。 HALO はアップストリームのコールバック交換を所有しますが、アプリケーションは許可リストに登録されたクライアント コールバックで有効期間の短いワンタイム コードを受け取ります。
#プロジェクト コールバック URL
https://api.agihalo.com/api/v1/auth/projects/{PROJECT_ID}/providers/{PROVIDER}/callback#サポートされるプロバイダー
| プロバイダ | アップストリーム アプリケーション | コールバック メソッド |
|---|---|---|
| OAuth Web アプリケーション | GET | |
| Apple | サービス ID / Apple でのサインイン | POST フォーム応答 |
| GitHub | OAuth アプリ | GET |
| Microsoft | アプリ登録 / Web リダイレクト | GET |
クライアント ID とシークレットを HALO に保存し、プロバイダー スコープを選択して、サインインを有効にします。保存されたシークレットは暗号化され、決して返されません。
#ブラウザ + PKCE フロー
// 1. Create an S256 PKCE verifier/challenge in your app.
const url = new URL(
"https://api.agihalo.com/api/v1/auth/providers/google/authorize"
);
url.searchParams.set("apikey", HALO_PROJECT_PUBLISHABLE_KEY);
url.searchParams.set("redirect_to", "https://app.example.com/auth/callback");
url.searchParams.set("code_challenge", codeChallenge);
url.searchParams.set("code_challenge_method", "S256");
url.searchParams.set("state", clientState);
window.location.assign(url.toString());- 1アプリが認証を開始します
公開可能なキー、許可リストに登録されたクライアント コールバック、状態、および S256 チャレンジを含む HALO プロバイダー承認 URL を開きます。
- 2HALO はプロバイダーを呼び出す
HALO は 1 回限りの状態を保存し、プロバイダー リクエストを送信し、プロジェクト固有のコールバックを受信します。
- 3コールバックはコード
HALO は、正確なクライアントにリダイレクトします。有効期間の短いコードと元の状態を含むコールバック。
- 4アプリがコードを交換します
元の検証者とリダイレクト URL を送信して、プロジェクト ユーザー セッションを受信します。
#セキュリティ動作
- 認可とコールバック応答はストアなしポリシーを使用します。
- リダイレクト URL はプロジェクト設定と正確に一致する必要があります。
- 状態コードとワンタイム コードは一度消費されて期限切れになります。
- 未確認のプロバイダーの電子メールとプロジェクト間の ID の競合はフェール クローズされます。