エンドポイントの認可
/oauth2/authorize
エンドポイントはユーザーをサインインさせます。その機能は、ログインエンドポイント と似ています。
GET /oauth2/authorize
/oauth2/authorize
エンドポイントは HTTPS GET
のみをサポートします。ユーザープールクライアントは通常、このリクエストをブラウザ経由で行います。
認可サーバーには HTTPS が必要です。OpenID Connect の仕様の詳細については、「認可エンドポイント
パラメータのリクエスト
- response_type
-
レスポンスのタイプ。
code
またはtoken
を指定する必要があります。クライアントがユーザーの認可コードを求めるか (認可コード付与フロー)、ユーザーに直接トークンを発行するか (暗黙的フロー) を示します。必須。
- client_id
-
クライアント ID。
ユーザープールですでに登録されており、フェデレーションの対象となっているクライアントである必要があります。
必須。
- 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
-
このパラメータを追加して、ホストされた UI をバイパスし、ユーザーをプロバイダーのサインインページにリダイレクトします。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 コンソールの [Sign-in experience] (サインインエクスペリエンス) タブから、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
から生成されたチャレンジ。code_challenge_method
パラメータを指定した場合にのみ必須です。 - ノンス
-
リクエストに追加できるランダムな値。指定したノンス値は、Amazon Cognito が発行する ID トークンに含まれます。
nonce
値を使用してリプレイ攻撃から保護できます。
肯定応答を含むリクエストの例
認可コード付与
リクエスト例
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 つ以上含めることができます。フラグメントはウェブリクエストの一部で「#」文字の後に追加され、ドキュメントのサブセクションを指定します。
レスポンスは、5 分間有効な 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
スコープがリクエストされなかったため、Amazon Cognito は ID トークンを返しません。また、Amazon Cognito はこのフローで更新トークンを返しません。Amazon Cognito はアクセストークンとステートをクエリ文字列ではなくフラグメントで返します。
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_uri#id_token=ID_TOKEN&access_token=ACCESS_TOKEN&token_type=bearer&expires_in=3600&state=STATE
否定応答の例
否定応答の例を次に示します。
-
client_id
とredirect_uri
が有効であるが、リクエストパラメータが正しくフォーマットされていない場合、認証サーバーはエラーをクライアントのredirect_uri
にリダイレクトし、URL パラメータにエラーメッセージを追加します。正しくない形式の例としては、リクエストにresponse_type
パラメータが含まれていない場合、レスポンスがcode_challenge_method
ではなくcode_challenge
を提供するか、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_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
-
-
サードパーティーの 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
-