Amazon Cognito と AWS Amplify UI を使用して、React アプリケーションの既存ユーザーを認証する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Cognito と AWS Amplify UI を使用して、React アプリケーションの既存ユーザーを認証する

Amazon Web Services、Daniel Kozhemyako

概要

このパターンでは、 AWS Amplify UI ライブラリと Amazon Cognito ユーザープールを使用して、既存のフロントエンドの React アプリケーションに認証機能を追加する方法を紹介します。

このパターンは、Amazon Cognito を使用して、アプリケーションの認証、認可、ユーザー管理機能を提供します。また、 の機能をユーザーインターフェイス (UI) 開発に拡張するオープンソースライブラリである Amplify UI のコンポーネントも使用します。 AWS Amplify Authenticator UI のコンポーネントは、ログインセッションを管理し、Amazon Cognito でユーザーを認証するクラウド接続のワークフローを実行します。

このパターンを実装すると、ユーザーは次の認証情報のいずれかを使用してサインインできます。

  • ユーザー名とパスワード

  • Apple、Facebook、Google、Amazon などのソーシャル ID プロバイダー

  • SAML 2.0 互換または OpenID Connect (OIDC) 互換のエンタープライズ ID プロバイダー

注記

カスタムの認証 UI コンポーネントを作成するには、Authenticator UI コンポーネントをヘッドレスモードで実行します。

前提条件と制限

前提条件

  • アクティブな AWS アカウント

  • React 18.2.0 以降のウェブアプリケーション

  • Node.js および npm 6.14.4 以降がインストール済みであること

制限事項

  • このパターンは React Web アプリケーションのみに適用されます。

  • このパターンは、事前構築済みの Amplify UIコンポーネントを使用します。このソリューションには、カスタム UI コンポーネントの実装に必要な手順は含まれません。

製品バージョン

  • Amplify UI 6.1.3 以降 (Gen 1)

  • Amplify 6.0.16 以降 (Gen 1)

アーキテクチャ

ターゲットアーキテクチャ

以下の図は、Amazon Cognito を使用して React ウェブアプリケーションのユーザーを認証するアーキテクチャを示しています。

Amazon Cognito が React ウェブアプリケーションのユーザーを認証する。

ツール

AWS のサービス

  • Amazon Cognito は、ウェブおよびモバイルアプリの認証、認可、およびユーザー管理機能を提供します。

その他のツール

  • Amplify UI は、クラウドに接続できるカスタマイズ可能なコンポーネントを提供するオープンソースの UI ライブラリです。

  • Node.js は、スケーラブルなネットワークアプリケーションを構築するために設計された、イベント駆動型の JavaScript ランタイム環境です。

  • npm は Node.js 環境で動作するソフトウェアレジストリで、パッケージの共有や借用、プライベートパッケージのデプロイ管理に使用されます。

ベストプラクティス

新しいアプリケーションを構築する場合は、Amplify Gen 2 を使用することを推奨します。

エピック

タスク説明必要なスキル

ユーザープールの作成

Amazon Cognito ユーザープールを作成します。ユーザープールのサインインオプションとセキュリティ要件を、お使いのユースケースに合うように設定します。

アプリ開発者

アプリクライアントを追加します。

ユーザープールアプリクライアントを設定します。このクライアントは、アプリケーションが Amazon Cognito ユーザープールとインタラクトするために必要です。

アプリ開発者
タスク説明必要なスキル

依存関係をインストールします。

aws-amplify および @aws-amplify/ui-react パッケージをインストールするには、アプリケーションのルートディレクトリから次のコマンドを実行します。

npm i @aws-amplify/ui-react aws-amplify
アプリ開発者

ユーザープールを設定します。

次の例を参考に、aws-exports.js ファイルを作成して src フォルダに保存します。このファイルには次の情報が含まれています。

  • AWS リージョン Amazon Cognito ユーザープールが

  • Amazon Cognito ユーザープール ID

  • アプリクライアント ID

// replace the user pool region, id, and app client id details const awsmobile = { "aws_project_region": "put_your_region_here", "aws_cognito_region": "put_your_region_here", "aws_user_pools_id": "put_your_user_pool_id_here", "aws_user_pools_web_client_id": "put_your_user_pool_app_id_here" } export default awsmobile;
アプリ開発者

Amplify サービスをインポートして設定します。

  1. アプリケーションのエントリポイントファイル (App.js など) に次のコード行を入力し、aws-exports.js ファイルをインポートして読み込みます。

    import { Amplify } from 'aws-amplify'; import awsExports from './aws-exports';
  2. 次の例を参考に、aws-exports.js ファイルを使用して Amplify クライアントを設定します。

    // Configure Amplify in index file or root file Amplify.configure({ ...awsExports });

    詳細については、Amplify ドキュメントの「Configure Amplify categories」を参照してください。

アプリ開発者

Authenticator UI コンポーネントを追加します。

Authenticator UI コンポーネントを表示するには、アプリケーションのエントリポイントファイル (App.js) に次のコード行を追加します。

import { Authenticator } from '@aws-amplify/ui-react'; import '@aws-amplify/ui-react/styles.css';
注記

サンプルのコードスニペットは、Authenticator UI コンポーネントと Amplify UI styles.css ファイル (コンポーネントの事前ビルド済みテーマを使用するときに必要) をインポートします。

Authenticator UI コンポーネントは 2 つの戻り値を提供します。

  • ユーザー詳細

  • ユーザーをサインアウトするために呼び出せる関数

次のコンポーネント例を参照してください。

function App() { return ( <Authenticator> {({ signOut, user }) => ( <div> <p>Welcome {user.username}</p> <button onClick={signOut}>Sign out</button> </div> )} </Authenticator> ); }
注記

App.js ファイルの例については、このパターンの追加情報セクションを参照してください。

アプリ開発者

(オプション) セッション情報を取得します。

ユーザーが認証されると、AAmplify クライアントからセッションに関するデータを取得できます。たとえば、ユーザーのセッションから JSON Web トークン (JWT) を取得して、そのユーザーのセッションからバックエンド API への要求を認証できます。

JWT を含む要求ヘッダーの次の例を参照してください。

import { fetchAuthSession } from 'aws-amplify/auth'; (await fetchAuthSession()).tokens?.idToken?.toString();
アプリデベロッパー

トラブルシューティング

問題ソリューション

新規ユーザーはアプリケーションにサインアップできません。

次のとおり、ユーザーがユーザープールにサインアップできるよう Amazon Cognito ユーザープールが設定されていることを確認します。

  • にサインインし AWS マネジメントコンソール、Amazon Cognito コンソールを開きます。

  • 左のナビゲーションペインで、[ユーザープール] を選択します。

  • リストから ユーザープールを選択します。

  • [General Settings(全般設定)] で、[Policies(ポリシー)] を選択します。

  • [Allow users to sign themselves up (ユーザーにサインアップを許可)] を選択します。

v5 から v6 にアップグレードしたら認証コンポーネント動作しなくなりました。

Auth カテゴリは Amplify v6 の機能アプローチと名前付きパラメータに移行しました。今後は、機能 API は aws-amplify/auth パスから直接インポートする必要があります。詳細については、Amplify ドキュメントの「Migrate from v5 to v6」を参照してください。

関連リソース

追加情報

App.js ファイルには次のコードが含まれています。

import './App.css'; import { Amplify } from 'aws-amplify'; import awsExports from './aws-exports'; import { fetchAuthSession } from 'aws-amplify/auth'; import { Authenticator } from '@aws-amplify/ui-react'; import '@aws-amplify/ui-react/styles.css'; Amplify.configure({ ...awsExports }); let token = (await fetchAuthSession()).tokens?.idToken?.toString(); function App() { return ( <Authenticator> {({ signOut, user }) => ( <div> <p>Welcome {user.username}</p> <p>Your token is: {token}</p> <button onClick={signOut}>Sign out</button> </div> )} </Authenticator> ); } export default App;