Amazon Cognito のカスタムスコープを使用して API Gateway API へのアクセスを許可する方法を教えてください。

最終更新日: 2020 年 9 月 25 日

Amazon Cognito ユーザープールのカスタムスコープを使用して、Amazon API Gateway API リソースへのアクセスを許可します。どうすればよいですか?

簡単な説明

Amazon Cognito ユーザープールでカスタムスコープを持つリソースサーバーを定義します。次に、API Gateway API の Amazon Cognito オーソライザーを作成して設定し、API リソースへのリクエストを認証します。

API リソースへの異なるアクセスレベルを必要とするさまざまなアプリクライアントがある場合は、定義したカスタムスコープに基づいて差別化されたアクセスを提供できます。さまざまなアプリケーションクライアントが必要とする詳細レベルのアクセスを検討し、それに応じて設計します。

解決方法

以下の前提条件を作成していない場合は、それを行います。

カスタムスコープでリソースサーバーをユーザープールに追加する

  1. Amazon Cognito コンソール を開きます。
  2. リソースサーバーとカスタムスコープを定義します
  3. 変更を保存したら、[リソースサーバー] タブで、[アプリクライアント設定の構成] を選択します。
  4. [アプリクライアント設定] タブの [OAuth 2.0] で、以下の操作を行います。
    [許可された OAuth フロー] で、必ず [黙示的な付与] チェックボックスをオンにします。
    [許可されたカスタムスコープ] で、定義したカスタムスコープのチェックボックスをオンにします。
    注意 : カスタムスコープの形式が resourceServerIdentifier/scopeNameであることに注意してください。クライアントが OAuth 2.0 フローでカスタムスコープをリクエストする場合、この形式のスコープの完全な識別子がリクエストに含まれている必要があります。
  5. [Save changes] (変更を保存) を選択します。

モバイルアプリケーションにサーバー側コンポーネントがある場合は、認証コード付与フローと PKCE (Proof Key for Code Exchange) を使用します。認証コード付与フローでは、トークンはエンドユーザーに直接公開されることはなく、公開される可能性は低くなります。

セットアップにサーバー側のロジックが含まれていない場合は、黙示的な付与フローを使用できます。黙示的な付与はリフレッシュトークンを生成しないため、リフレッシュトークンがクライアントに公開されないようにするのに役立ちます。リフレッシュトークンは、より長い有効性を持ち、より新しい ID およびアクセストークンを取得するために使用されます。
重要: リフレッシュトークンはクライアント側の環境に保存しないでください。

詳細については、アプリクライアント設定の概要を参照してください。Amazon Cognito ユーザープール OAuth 2.0 付与の詳細については、Amazon Cognito ユーザープール OAuth 2.0 付与とはを参照してください。

オーソライザーを作成し、API と統合する

これらのステップを完了するには、REST API と Amazon Cognito ユーザープールを統合するの手順に従います。

  1. オーソライザーを作成するには、API Gateway コンソールを使用して COGNITO_USER_POOLS オーソライザーを作成するにはの手順に従います。
    注意 : 作成後、コンソールにオーソライザーを テスト するオプションがあります。これには、 ID トークンが必要です。アクセストークンを使用してコンソール外でセットアップをテストするには、この記事で後述する「テストのためのユーザープールアクセストークンを取得する」 を参照してください。
  2. オーソライザーを API と統合するには、「メソッドで COGNITO_USER_POOLS オーソライザーを設定するには」の手順に従います。
    注意 : OAuth Scopes に、カスタムスコープの完全な ID を resourceServerIdentifier/scopeName形式で入力します。
  3. API をデプロイします。

テスト用のユーザープールのアクセストークンを取得する

ユーザープールのホストされたウェブ UI を使用してサインインし、Amazon Cognito 認証サーバーからアクセストークンを取得します。または、モバイルおよびウェブ AWS SDK で利用可能な OAuth 2.0 エンドポイント実装を使用して、アクセストークンを取得します。

注意: アプリクライアントがホストされたウェブ UI を通じて認証をリクエストする場合、リクエストには、システム予約スコープ、またはリソースサーバーで定義するカスタムスコープの任意の組み合わせを含めることができます。クライアントがスコープをリクエストしない場合、認証サーバーはクライアントに関連付けられたすべてのスコープを含むアクセストークンを返します。アプリクライアントを設計する際は、不要な権限が付与されないように、リクエストに目的のスコープが含まれているようにしてください。

  1. この URL をウェブブラウザで入力します。
    https://yourDomainPrefix.auth.region.amazoncognito.com/login?response_type=token&client_id=yourClientId&redirect_uri=redirectUrl
    注意: yourDomainPrefixリージョンは、ユーザープールの値に置き換えてください。Amazon Cognito コンソールのユーザープールの [Domain name] (ドメイン名) タブで検索します。
    yourClientId をアプリケーションクライアントの ID に置き換え、redirectUrl をアプリケーションクライアントのコールバック URL に置き換えます。ユーザープールの [App client settings] (アプリクライアントの設定) タブのコンソールで検索します。詳細については、LOGIN エンドポイントを参照してください。
  2. 作成したユーザーとしてユーザープールにサインインします。
  3. アドレスバーの URL からアクセストークンをコピーします。トークンは access_token= に続く長い文字列です。

テストとして API を呼び出す

テストで、認証ヘッダーの値としてアクセストークンを使用して API を呼び出します。コマンドラインインターフェイスから Postman アプリまたは curl を使用できます。curl の詳細については、curl プロジェクトのウェブサイトをご参照ください。

curl を使用するには、次のコマンドを実行します。

curl https://restApiId.execute-api.region.amazonaws.com/stageName/resourceName -H "Authorization: accessToken"

注意 : restApiId を API ID で置き換えます。region を API の AWS リージョンで置き換えます。stageName を API がデプロイされているステージの名前で置き換えます。resourceName を API リソースの名前で置き換えます。accessToken を、コピーしたトークンで置き換えます。詳細については、「Amazon API Gateway での REST API の呼び出し」を参照してください。

すべてが正しく設定されている場合、200 OK レスポンスコードが返されます。


この記事は役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?