Amazon Cognito
開発者ガイド

認可エンドポイント

/oauth2/authorize エンドポイントはユーザーをサインインさせます。

GET /oauth2/authorize

/oauth2/authorize エンドポイントは HTTPS GET のみをサポートします。ユーザープールクライアントは通常、このリクエストをブラウザ経由で行います。ウェブブラウザは、Chrome または Firefox を使用できます。Android ブラウザには、Custom Chrome Tab、iOS ブラウザには、Safari View Control があります。

認可サーバでは、認可エンドポイントにアクセスする際のプロトコルとして、HTTP ではなく、HTTPS を使用する必要があります。仕様の詳細については、「認可エンドポイント」を参照してください。

リクエストパラメータ

response_type

レスポンスのタイプ。code または token を指定する必要があります。クライアントがエンドユーザーの認可コードを求めるか (認可コード付与フロー)、エンドユーザーに直接トークンを発行するか (暗黙的フロー) を示します。

必須

client_id

クライアント ID。

ユーザープール事前登録されたクライアントである必要があり、フェデレーションが有効になっている必要があります。

必須

redirect_uri

認証がユーザーに付与された後、認可サーバによってブラウザがリダイレクトされる URL です。

リダイレクト URI は以下の条件を満たす必要があります。

  • 絶対 URI である。

  • クライアントに事前登録されている。

  • フラグメントコンポーネントを含まない。

OAuth 2.0 - リダイレクトエンドポイント」を参照してください。

Amazon Cognito では、テスト目的にのみ使用する http://localhost の場合を除き、HTTP ではなく HTTPS を使用します。

また、アプリのコールバック URL (例: myapp://example) もサポートされています。

必須

state

クライアントが初期リクエストに追加する OPAQUE 値。認可サーバはクライアントにリダイレクトして戻るときに、この値を含めます。

この値は、CSRF 攻撃を防ぐために、クライアントで使用する必要があります。

オプションですが、強くお勧めします。

identity_provider

開発者が特定のプロバイダに直接認証するために使用されます。

  • ソーシャルサインインでは、[Facebook]、[Google]、および [LoginWithAmazon] の値を使用できます。

  • Amazon Cognito ユーザープールの場合、値は [COGNITO] です。

  • その他の ID プロバイダーの場合は、ユーザープールの IdP に割り当てた名前になります。

オプション

idp_identifier

開発者がプロバイダ名を公開せずにプロバイダ名にマッピングするために使用します。

オプション

scope

クライアントに関連付けられた任意のシステム予約されたスコープまたはカスタムスコープを組み合わせることができます。スコープはスペースで区切る必要があります。システム予約されたスコープは openidemailphoneprofile、および aws.cognito.signin.user.admin です。使用するスコープはクライアントにあらかじめ関連付けられている必要があります。これを行わない場合、実行時に無視されます。

クライアントがスコープをリクエストしない場合、認可サーバはクライアントに関連付けられているすべてのスコープを使用します。

ID トークンは openid スコープがリクエストされた場合にのみ返されます。アクセストークンは、aws.cognito.signin.user.admin スコープがリクエストされた場合に、Amazon Cognito ユーザープールに対してのみ使用されます。phoneemail、および profile スコープは、openid スコープがリクエストされた場合にのみリクエストできます。これらのスコープは ID トークン内でクレームを記述します。

オプション

code_challenge_method

チャレンジを生成するために使用されるメソッドです。PKCE RFC では S256 および plain の 2 つのメソッドが定義されていますが、Amazon Cognito 認可サーバでは S256 のみがサポートされています。

オプション

code_challenge

code_verifier から生成されたチャレンジ。

code_challenge_method が指定された場合にのみ必須です。

肯定応答を含むリクエストの例

認可コード付与

リクエスト例

GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=openid+profile+aws.cognito.signin.user.admin

レスポンス例

Amazon Cognito 認可サーバは認可コードとステートを伴ってリダイレクトしアプリに戻ります。コードとステートはフラグメントではなく、クエリ文字列パラメータで返される必要があります。クエリ文字列はウェブリクエストの一部で、「?」文字の後に追加されます。この文字列には「&」文字で区切られたパラメータを 1 つ以上含めることができます。フラグメントはウェブリクエストの一部で「#」文字の後に追加され、ドキュメントのサブセクションを指定します。

HTTP/1.1 302 Found Location: https://YOUR_APP/redirect_uri?code=AUTHORIZATION_CODE&state=STATE

PKCE を使用した認可コード付与

リクエスト例

GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=aws.cognito.signin.user.admin& code_challenge_method=S256& code_challenge=CODE_CHALLENGE

レスポンス例

認可サーバは認可コードとステートを伴ってリダイレクトしアプリに戻ります。コードとステートはフラグメントではなく、クエリ文字列パラメータで返される必要があります。

HTTP/1.1 302 Found Location: https://YOUR_APP/redirect_uri?code=AUTHORIZATION_CODE&state=STATE

openid スコープを使用しないトークン付与

リクエスト例

GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=token& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=aws.cognito.signin.user.admin

レスポンス例

Amazon Cognito 認可サーバはアクセストークンを伴ってリダイレクトしアプリに戻ります。openid スコープがリクエストされなかったため、ID トークンは返されません。更新トークンがこのフローで返されることはありません。トークンとステートはクエリ文字列ではなくフラグメントで返されます。

HTTP/1.1 302 Found Location: https://YOUR_APP/redirect_uri#access_token=ACCESS_TOKEN&token_type=bearer&expires_in=3600&state=STATE

openid スコープを使用したトークン付与

リクエスト例

GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=token& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=aws.cognito.signin.user.admin+openid+profile

レスポンス例

認可サーバはアクセストークンと ID トークンを伴ってリダイレクトしアプリに戻ります (openid スコープが含まれていたため)。

HTTP/1.1 302 Found Location: https://YOUR_APP/redirect_ur#id_token=ID_TOKEN&access_token=ACCESS_TOKEN&token_type=bearer&expires_in=3600&state=STATE

否定応答の例

否定応答の例を次に示します。

  • client_id および redirect_uri が有効だがリクエストパラメータに他の問題 (たとえば、response_type が含まれていない、code_challenge が指定されているが code_challenge_method が指定されていない、code_challenge_method が「S256」など) がある場合、認可サーバはクライアントの redirect_uri にエラーをリダイレクトします。

    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request

  • クライアントが response_type に「code」または「token」をリクエストしたけれど、これらのリクエストの権限を持っていない場合、Amazon Cognito 認可サーバは次のように unauthorized_client をクライアントの redirect_uri に返します。

    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=unauthorized_client

  • クライアントのリクエストが無効、不明、誤った形式のスコープの場合は、Amazon Cognito 認可サーバは次のように invalid_scope をクライアントの redirect_uri に返す必要があります。

    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_scope

  • サーバーで予期しないエラーがある場合は、認可サーバは server_error をクライアントの redirect_uri に返す必要があります。エンドユーザーのブラウザに HTTP 500 エラーが表示されてはいけません。このエラーはクライアントに送信されることはありません。以下のエラーが返されます。

    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=server_error

  • サードパーティーの ID プロバイダーにフェデレーションして認証する場合、Cognito で次のような接続の問題が発生することがあります。

    • ID プロバイダーからトークンをリクエストしているときに接続タイムアウトが発生した場合、認証サーバーは以下のようにエラーをクライアントの redirect_uri にリダイレクトします。

      HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Timeout+occurred+in+calling+IdP+token+endpoint

    • id_token 検証のために jwks エンドポイントを呼び出しているときに接続タイムアウトが発生した場合、認証サーバーは以下のようにエラーをクライアントの redirect_uri にリダイレクトします。

      HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=error_description=Timeout+in+calling+jwks+uri

  • サードパーティーの ID プロバイダーにフェデレーションして認証する場合、プロバイダーは設定エラーまたは次のようなその他の理由でエラーレスポンスを返すことがあります。

    • 他のプロバイダーからエラーレスポンスを受け取った場合、認証サーバーは以下のようにエラーをクライアントの redirect_uri にリダイレクトします。

      HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=[IdP name]+Error+-+[status code]+error getting token

    • Google からエラーレスポンスを受け取った場合、認証サーバーは以下のようにエラーをクライアントの redirect_uri にリダイレクトします。

      HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Google+Error+-+[status code]+[Google provided error code]

  • まれに、外部 ID プロバイダーへの接続中に Cognito が通信プロトコルで例外を検出した場合、認証サーバーは次のいずれかのメッセージでエラーをクライアントの redirect_uri にリダイレクトします。

    • HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Connection+reset

    • HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Read+timed+out

このページの内容: