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

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

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

作成者: Daniel Kozhemyako (AWS)

環境:本稼働

テクノロジー: ウェブおよびモバイルアプリ、セキュリティ、アイデンティティ、コンプライアンス、ビジネスの生産性、分析

AWS サービス: Amazon CognitoAWSAmplify、Amazon Connect AWS マネジメントコンソール

[概要]

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

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

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

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

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

  • 2.0 SAML 互換または 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 以降 (世代 1)

アーキテクチャ

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

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

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

ツール

AWS のサービス

  • Amazon Cognito は、Web とモバイルアプリの認証、認可、ユーザー管理機能を提供します。

その他のツール

  • 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 ドキュメントの「Amplify カテゴリの設定」を参照してください。

アプリ開発者

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

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

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

: サンプルコードスニペットは、AuthenticatorUI コンポーネントと Amplify UI styles.css ファイルをインポートします。これは、コンポーネントの事前構築されたテーマを使用するときに必要です。

UI コンポーネントは、次の Authenticator 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ウェブトークン (JWT) を取得して、セッションからバックエンド へのリクエストを認証できますAPI。

を含むリクエストヘッダーの次の例を参照してくださいJWT。

import { fetchAuthSession } from 'aws-amplify/auth'; (await fetchAuthSession()).tokens?.idToken?.toString();
アプリ開発者

トラブルシューティング

問題ソリューション

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

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

  • にサインインし AWS Management Console、Amazon Cognito コンソール を開きます。

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

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

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

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

v5 から v6 にアップグレードすると、認証コンポーネントが機能しなくなりました。

Auth カテゴリは、Amplify v6 の機能的なアプローチと名前付きパラメータに移行しました。これで、 関数を aws-amplify/auth パスAPIsから直接インポートする必要があります。詳細については、Amplify ドキュメントの「v5 から 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;