ダッシュボード
認証

OAuth アプリ

サービスがプロジェクト ユーザーへの限定アクセスをリクエストできるようにします。

OAuth アプリは、Project Authentication をサービスの認可サーバーに変えます。サインインしているプロジェクト ユーザーは、アプリにユーザーのパスワードやアップストリーム ソーシャル プロバイダー トークンを与えずに、アプリの明示的なスコープを承認できます。

#OAuth アプリとは

#アプリを登録する

プロジェクトの認証 UI で、名前、クライアント タイプ、ホームページ、正確なリダイレクト URI、および許可されたスコープを追加します。

クライアント タイプ秘密PKCE
パブリック展開可能なクライアント シークレットはありませんS256 が必要であるように正規化されます。
機密トークン交換時に必要なクライアント シークレットサポートおよび推奨

クライアント シークレットが 1 回表示されてリクエストを再送信します。ローテーションすると、そのアプリの既存の OAuth トークンが取り消されます。

#認可フロー

GET https://api.agihalo.com/api/v1/auth/oauth/authorize
  ?client_id=halo_client_...
  &redirect_uri=https%3A%2F%2Fservice.example.com%2Fcallback
  &scope=profile%20email
  &state=opaque-client-state

GET エンドポイントは、クライアント、リダイレクト URI、および要求されたスコープを検証し、同意 UI のアプリの詳細を返します。ユーザーが承認したら、プロジェクト ユーザー アクセス トークンを使用して POST エンドポイントを呼び出します。

curl -X POST https://api.agihalo.com/api/v1/auth/oauth/authorize \
  -H "Authorization: Bearer $PROJECT_USER_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "halo_client_...",
    "redirect_uri": "https://service.example.com/callback",
    "scopes": ["profile", "email"],
    "state": "opaque-client-state",
    "code_challenge": "S256_CHALLENGE",
    "code_challenge_method": "S256"
  }'

応答には redirectToが含まれます。その正確な URL に移動して、サービスが code と元のstateを受信します。

#トークン交換

curl -X POST https://api.agihalo.com/api/v1/auth/oauth/token \
  -H "Content-Type: application/json" \
  -d '{
    "grant_type": "authorization_code",
    "client_id": "halo_client_...",
    "code": "halo_code_...",
    "redirect_uri": "https://service.example.com/callback",
    "code_verifier": "ORIGINAL_PKCE_VERIFIER"
  }'

機密クライアントは client_secretも送信します。認証コードは 1 回限りで、登録されたクライアント、リダイレクト URI、プロジェクト ユーザー、スコープ、およびオプションの S256 チャレンジにバインドされます。

POST/api/v1/auth/oauth/token

認可コードとリフレッシュ トークンの付与。

#ユーザー情報とスコープ

GET/api/v1/auth/oauth/userinfo

OAuthアクセストークンをベアラートークンとして送信します。 HALO は、プロジェクト ユーザー情報を返す前に、プロジェクト、アプリ、対象ユーザー、トークンの使用、ユーザー ステータス、スコープを検証します。