翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
リダイレクトエンドポイントと認可エンドポイント
/oauth2/authorize エンドポイントは、2 つのリダイレクト先をサポートするリダイレクトエンドポイントです。URL に identity_provider または idp_identifier のパラメータを含めると、ユーザーはその ID プロバイダー (IdP) のサインインページにそのままリダイレクトされます。それ以外の場合は、リクエストに含まれるものと同じ URL パラメータを持つ ログインエンドポイント にリダイレクトされます。
認可エンドポイントは、マネージドログインまたは IdP サインインページのどちらかにリダイレクトされます。このエンドポイントにおけるユーザーセッションの送信先は、ユーザーがブラウザで直接操作する必要があるウェブページです。
認可エンドポイントを使用するには、ユーザープールに以下のユーザープールの詳細に関する情報を提供するパラメータを使用して、ユーザーのブラウザを /oauth2/authorize で呼び出します。
-
サインインするアプリクライアント。
-
終了させたいコールバック URL。
-
ユーザーのアクセストークンでリクエストする OAuth 2.0 スコープ。
-
サインインに使用するサードパーティーの IdP (任意)。
また、Amazon Cognito が受信クレームの検証に使用する state および nonce パラメータを提供することもできます。
GET /oauth2/authorize
/oauth2/authorize エンドポイントは HTTPS
GET のみをサポートします。アプリは通常、このリクエストをユーザーのブラウザで開始します。/oauth2/authorize エンドポイントへのリクエストは、HTTPS でのみ行うことができます。
OpenID Connect (OIDC) 標準における認可エンドポイントの定義の詳細については、「Authorization Endpoint
リクエストパラメータ
response_type-
必須。
レスポンスのタイプ。
codeまたはtokenを指定する必要があります。response_typeがcodeのリクエストに成功すると、認可コード付与を返します。認可コード付与とは、Amazon Cognito がリダイレクト URL に追加するcodeパラメータです。アプリは トークンエンドポイント と、アクセス、ID、更新の各トークンとコードを交換することができます。セキュリティ上のベストプラクティスとして、またユーザーに更新トークンを受け取るには、アプリで認可コード付与を使用します。response_typeがtokenのリクエストに成功すると、暗黙的な付与を返します。暗黙的な付与とは、Amazon Cognito がリダイレクト URL に追加する ID とアクセストークンのことです。暗黙的な付与は、トークンと潜在的な識別情報をユーザーに公開するため、安全性が低くなります。アプリクライアントの設定で、暗黙的な付与のサポートを無効にできます。 client_id-
必須。
アプリクライアント ID。
client_idの値は、リクエストを行うユーザープール内のアプリクライアントの ID である必要があります。アプリクライアントは、Amazon Cognito ローカルユーザーまたは少なくとも 1 つのサードパーティー IdP によるサインインをサポートしている必要があります。 redirect_uri-
必須。
Amazon Cognito がユーザーを認証した後、認証サーバーによってブラウザがリダイレクトされる URL です。
リダイレクト Uniform Resource Identifier (URI) には次の属性が必要です。
-
絶対 URI である。
-
URI を事前にクライアントに登録しておく必要があります。
-
フラグメントコンポーネントが含まれていない。
「OAuth 2.0 - リダイレクトエンドポイント
」を参照してください。 Amazon Cognito では、テスト目的のコールバック URL として設定できる
http://localhostを除き、リダイレクト URI に HTTPS を使用することが必要です。Amazon Cognito では、
myapp://exampleのようなアプリのコールバック URL もサポートしています。 -
state-
オプション、推奨。
アプリがリクエストに state パラメータを追加すると、Amazon Cognito は
/oauth2/authorizeエンドポイントはユーザーをリダイレクトする際に、その値をアプリに返します。この値をリクエストに追加して CSRF
攻撃から保護します。 stateパラメータの値を、URL でエンコードされた JSON 文字列に設定することはできません。この形式に一致する文字列をstateパラメータで渡すには、文字列を base64 にエンコードし、アプリケーション内でデコードします。 identity_provider-
オプション。
このパラメータを追加して、マネージドログインをバイパスし、ユーザーをプロバイダーのサインインページにリダイレクトします。identity_provider パラメータの値はユーザープールに表示される ID プロバイダー (IdP) の名前です。
-
ソーシャルプロバイダーの場合、identity_provider 値として
Facebook、Google、LoginWithAmazon、SignInWithAppleを使用できます。 -
Amazon Cognito ユーザープールの場合、値
COGNITOを使用します。 -
SAML 2.0 および OpenID Connect (OIDC) ID プロバイダー (IdP) の場合は、ユーザープールで IdP に割り当てた名前を使用します。
-
idp_identifier-
オプション。
このパラメータを追加して、identity_provider 名の代替名を持つプロバイダーにリダイレクトします。Amazon Cognito コンソールの [ソーシャルプロバイダーと外部プロバイダー] メニューから、SAML 2.0 と OIDC IdP の識別子を入力できます。
scope-
オプション。
クライアントに関連付けられているシステム予約されたスコープ、またはカスタムスコープの組み合わせにすることができます。スコープはスペースで区切る必要があります。システム予約されたスコープは
openid、email、phone、profile、およびaws.cognito.signin.user.adminです。使用されるスコープは、いずれもクライアントに関連付けられている必要があり、関連付けられていなければ、ランタイム時に無視されます。クライアントがスコープをリクエストしない場合、認証サーバーはクライアントに関連付けられているすべてのスコープを使用します。
ID トークンは
openidスコープがリクエストされた場合にのみ返されます。Amazon Cognito ユーザープールに対してアクセストークンを使用できるのは、aws.cognito.signin.user.adminスコープがリクエストされている場合のみです。phone、email、およびprofileスコープは、openidスコープがリクエストされた場合にのみリクエストできます。これらのスコープは ID トークン内でクレームを記述します。 code_challenge_method-
オプション。
チャレンジの生成に使用したハッシュプロトコル。PKCE RFC
では S256 および plain の 2 つのメソッドが定義されていますが、Amazon Cognito 認証サーバーでは S256 のみがサポートされています。 code_challenge-
オプション。
code_verifierから生成した Proof of Key Code Exchange (PKCE) チャレンジ。詳細については、「認可コード許可での PKCE の使用」を参照してください。code_challenge_methodパラメータを指定した場合にのみ必須です。 nonce-
オプション。
リクエストに追加できるランダムな値。指定したノンス値は、Amazon Cognito が発行する ID トークンに含まれます。リプレイ攻撃を防ぐために、アプリは ID トークンの
nonceクレームを検査し、生成したものと比較することができます。nonceクレームの詳細については、「OpenID Connect standard」(OpenID Connect 標準) の「ID token validation」(ID トークンの検証) を参照してください。 lang-
オプション。
ユーザーインタラクティブページを表示する言語。マネージドログインページはローカライズできますが、ホストされた UI (クラシック) ページはローカライズできません。詳細については、「マネージドログインのローカリゼーション」を参照してください。
login_hint-
オプション。
認可サーバーに渡すユーザー名プロンプト。ユーザーからユーザー名、E メールアドレス、または電話番号を収集し、送信先プロバイダーがユーザーのサインイン名を事前に入力できるようにできます。
oauth2/authorizeエンドポイントにlogin_hintパラメータを送信し、idp_identifierまたはidentity_providerパラメータを送信しない場合、マネージドログインはユーザー名フィールドにヒント値を入力します。また、このパラメータを ログインエンドポイント に渡し、ユーザー名値を自動的に入力することもできます。認可リクエストが OIDC IdP または Google へのリダイレクトを呼び出すと、Amazon Cognito はそのサードパーティーオーソライザーへのリクエストに、
login_hintパラメータを追加します。ログインヒントを SAML、Apple、Login With Amazon、または Facebook (Meta) の IdP に転送することはできません。 prompt-
オプション。
既存のセッションの認証動作を制御する OIDC パラメータ。クラシックのホストされた UI ではなく、マネージドログインのブランディングバージョンでのみ使用できます。OIDC 仕様の詳細については、「認証リクエスト
」を参照してください。値 noneとloginは、ユーザープールの認証動作に影響します。ユーザーがサードパーティプロバイダーによる認証を選択した場合、Amazon Cognito は、
promptのすべての値 (noneを除く) を IdP に転送します。これは、ユーザーがアクセスする URL にidentity_providerパラメータまたはidp_identifierパラメータが含まれている場合、または認可サーバーがユーザーをログインエンドポイントにリダイレクトし、ユーザーが使用可能なボタンから IdP を選択した場合に当てはまります。プロンプトパラメータ値
prompt=none-
Amazon Cognito は、有効な認証済みセッションを持つユーザーの認証をサイレントに継続します。このプロンプトを使用すると、ユーザーはユーザープール内の異なるアプリケーションクライアント間でサイレント認証を行うことができます。ユーザーがまだ認証されていない場合、認可サーバーは
login_requiredエラーを返します。 prompt=login-
Amazon Cognito では、既存のセッションがある場合でも、ユーザーに再認証を求めます。ユーザーの ID を再検証する場合は、この値を送信します。既存のセッションを持つ認証済みユーザーは、そのセッションを無効にすることなく、サインインに戻ることができます。既存のセッションを持つユーザーが再度サインインすると、Amazon Cognito は新しいセッション Cookie をユーザーに割り当てます。このパラメータは IdP に転送することもできます。このパラメータを受け入れる IdP は、ユーザーに新しい認証試行もリクエストします。
prompt=select_account-
この値はローカルサインインには影響せず、IdP にリダイレクトするリクエストで送信する必要があります。認可リクエストに含めると、このパラメータは IdP リダイレクト先の URL パスに
prompt=select_accountを追加します。このパラメータを IdP がサポートしている場合、ユーザーはログインに使用するアカウントを選択するよう求められます。 prompt=consent-
この値はローカルサインインには影響せず、IdP にリダイレクトするリクエストで送信する必要があります。認可リクエストに含めると、このパラメータは IdP リダイレクト先の URL パスに
prompt=consentを追加します。このパラメータを IdP がサポートしている場合、IdP は、ユーザープールへのリダイレクト前に、ユーザーの同意をリクエストします。
リクエストから
promptパラメータを省略すると、マネージドログインはデフォルトの動作に従います。ブラウザに有効なマネージドログインセッション Cookie がない限り、ユーザーはサインインする必要があります。promptの複数の値をスペース文字で区切って組み合わせることができます (例:prompt=login consent)。 resource-
オプション。
audクレーム内のアクセストークンにバインドするリソースの識別子。このパラメータを含めると、Amazon Cognito は値が URL であることを確認し、結果のアクセストークンのオーディエンスを、リクエストされたリソースに設定します。ユーザープールのリソースサーバーは、URL 形式の識別子、または任意の URL を使用してリクエストできます。このパラメータの値は、https://、http://localhost、またはカスタム URL スキーム (myapp://など) で始める必要があります。リソースバインディングは RFC 8707
で定義されています。リソースサーバーとリソースバインディングの詳細については、「リソースバインディング」を参照してください。
例: 認証コード付与
これは、認可コード付与のリクエストの例です。
次のリクエストは、ユーザーが redirect_uri 送信先でアプリケーションに渡す認可コードを取得するセッションを開始します。このセッションでは、ユーザー属性用スコープと、Amazon Cognito セルフサービス API オペレーションへのアクセス用スコープをリクエストします。
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=1example23456789& redirect_uri=https://www.example.com& state=abcdefg& scope=openid+profile+aws.cognito.signin.user.admin
Amazon Cognito 認証サーバーは、認可コードとステートを伴ってリダイレクトしアプリに戻ります。認可コードは 5 分間有効です。
HTTP/1.1 302 Found
Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&state=abcdefg
例: PKCE を使用した認証コード付与
このフロー例では、PKCE を使用して認証コード付与を実行します。
このリクエストでは、code_challenge パラメータを追加します。トークンのコード交換を完了するには、/oauth2/token エンドポイントへのリクエストに code_verifier パラメータを含める必要があります。
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=1example23456789& redirect_uri=https://www.example.com& state=abcdefg& scope=aws.cognito.signin.user.admin& code_challenge_method=S256& code_challenge=a1b2c3d4...
認可サーバーは、認証コードと状態をアプリケーションにリダイレクトします。アプリケーションは認証コードを処理し、トークンと交換します。
HTTP/1.1 302 Found
Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&state=abcdefg
例: prompt=login で再認証を要求する
次のリクエストでは、既存のセッションがある場合でも、ユーザーに再認証を求める prompt=login パラメータを追加します。
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=1example23456789& redirect_uri=https://www.example.com& state=abcdefg& scope=openid+profile+aws.cognito.signin.user.admin& prompt=login
認可サーバーは、ログインエンドポイントにリダイレクトし、再認証を要求します。
HTTP/1.1 302 Found Location: https://mydomain.auth.us-east-1.amazoncognito.com/login?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com&state=abcdefg&scope=openid+profile+aws.cognito.signin.user.admin&prompt=login
例: prompt=none によるサイレント認証
次のリクエストでは、ユーザーが有効なセッションを持っているかどうかをサイレントに確認する prompt=none パラメータを追加します。
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=1example23456789& redirect_uri=https://www.example.com& state=abcdefg& scope=openid+profile+aws.cognito.signin.user.admin& prompt=none
有効なセッションが存在しない場合、認可サーバーはリダイレクト URI にエラーを返します。
HTTP/1.1 302 Found Location: https://www.example.com?error=login_required&state=abcdefg
有効なセッションが存在する場合、認可サーバーは認証コードを返します。
HTTP/1.1 302 Found Location: https://www.example.com?code=AUTHORIZATION_CODE&state=abcdefg
例: リソースバインディングによる認証コード付与
次のリクエストは、アクセストークンを特定のリソースサーバーにバインドする resource パラメータを追加します。結果としてのアクセストークンは、それが認証済みユーザーのリクエストのオーディエンスであることを、ターゲット API で検証するための条件を作成します。
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=1example23456789& redirect_uri=https://www.example.com& state=abcdefg& scope=solar-system-data-api.example.com/asteroids.add& resource=https://solar-system-data-api.example.com
認可サーバーは、aud クレームとして https://solar-system-data-api.example.com を持つアクセストークンを生成する認可コードを返します。
HTTP/1.1 302 Found Location: https://www.example.com?code=AUTHORIZATION_CODE&state=abcdefg
例: openid スコープなしのトークンの (暗黙的) 付与
このフロー例では、暗黙的な付与を生成し、JWT をユーザーのセッションに直接返します。
次のリクエストでは、認可サーバーに対して暗黙的な付与を求めます。ユーザープロファイルのセルフサービスオペレーションを認可するアクセストークン内のスコープをリクエストします。
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=token& client_id=1example23456789& redirect_uri=https://www.example.com& state=abcdefg& scope=aws.cognito.signin.user.admin
認可サーバは、アクセストークンのみをアプリケーションにリダイレクトします。openid スコープがリクエストされなかったため、Amazon Cognito は ID トークンを返しません。また、Amazon Cognito はこのフローで更新トークンを返しません。
HTTP/1.1 302 Found
Location: https://example.com/callback#access_token=eyJra456defEXAMPLE&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=1example23456789& redirect_uri=https://www.example.com& state=abcdefg& scope=aws.cognito.signin.user.admin+openid+profile
認可サーバーは、アクセストークンと ID トークンをアプリケーションにリダイレクトします (openid スコープが含まれていたため)。
HTTP/1.1 302 Found
Location: https://www.example.com#id_token=eyJra67890EXAMPLE&access_token=eyJra12345EXAMPLE&token_type=bearer&expires_in=3600&state=abcdefg
否定応答の例
Amazon Cognito はリクエストを拒否する場合があります。否定リクエストには、HTTP エラーコードと、リクエストパラメータの修正に使用できる説明が付属しています。否定応答の例を次に示します。
-
client_idとredirect_uriが有効であるが、リクエストパラメータが正しくフォーマットされていない場合、認証サーバーはエラーをクライアントのredirect_uriにリダイレクトし、URL パラメータにエラーメッセージを追加します。形式が正しくない場合の例を以下に示します。-
リクエストには
response_typeパラメータが含まれていません。 -
認可リクエストは
code_challengeパラメータを提供しましたが、code_challenge_methodパラメータは提供していません。 -
code_challenge_methodパラメータの値がS256でありません。
以下は、形式が正しくないリクエスト例に対する応答です。
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 -
サーバーで予期しないエラーが発生した場合は、認証サーバーがクライアントの
redirect_uriにserver_errorを返します。HTTP 500 エラーはクライアントに送信されないので、ユーザーのブラウザにエラーが表示されません。認可サーバーは次のエラーを返します。HTTP 1.1 302 Found Location: https://client_redirect_uri?error=server_error -
Amazon Cognito がサードパーティー ID プロバイダーとのフェデレーションを通じて認証するときは、以下のような接続問題が発生する場合があります。
-
IdP からトークンをリクエストしているときに接続タイムアウトが発生した場合、認証サーバーは以下のようにエラーをクライアントの
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 トークン検証のための
jwks_uriエンドポイントの呼び出し時に接続タイムアウトが発生する場合、認証サーバーは以下のようにエラーをクライアントのredirect_uriにリダイレクトします。HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=error_description=Timeout+in+calling+jwks+uri
-
-
サードパーティー IdP による認証がなされた場合、プロバイダーはエラー応答を返すことがあります。これは、設定エラーのほか、次のような理由が原因である可能性があります。
-
他のプロバイダーからエラーレスポンスを受け取った場合、認証サーバーは以下のようにエラーをクライアントの
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]
-
-
Amazon Cognito が外部 IdP への接続中に通信プロトコルで例外を検出した場合、認証サーバーは次のいずれかのメッセージでエラーをクライアントの
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
-