Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated Apr 30, 2024

Maintenance ModeYou are viewing Amplify Gen 1 documentation. Amplify Gen 1 has entered maintenance mode and will reach end of life on May 1, 2027. New project should use Amplify Gen 2. For existing Gen 1 projects, a migration guide and tooling are available to help you upgrade. Switch to the latest Gen 2 docs →

仕組みの詳細

認証(_AuthN_と略記)は、あなたが誰であるかを検証するプロセスです。この検証を行うシステムは、識別プロバイダーまたはIdPと呼ばれます。これは自分でホストする IdP またはクラウドサービスの場合があります。多くの場合、この IdP は Facebook、Google、Amazon などのソーシャルプロバイダーです。

認可(_AuthZ_と略記)は、何にアクセスできるかを検証するプロセスです。これは、カスタムロジックを備えたトークンを確認したり、事前に定義されたルールを使用したり、ポリシーを使用した署名付きリクエストで行われることもあります。

AWS による認証

Amplify エコシステムでは、最も一般的な認証方法は、Amazon Cognito User Pools を単独で使用するか、ソーシャルプロバイダーと一緒に使用してユーザーの ID を検証する方法です(_フェデレーション_として知られています)。

Amazon Cognito User Pools は、ユーザーの登録、認証、アカウント回復を処理するための完全な機能を備えたユーザーディレクトリサービスです。一方、Amazon Cognito フェデレーション ID またはアイデンティティプールは、AWS サービスを使用するようユーザーを認可する方法です。

Amplify は User Pools とインターフェースして、Facebook や Google などの他の OpenID プロバイダーとのフェデレーションを含むユーザー情報を保存し、フェデレーション ID を活用して AWS リソースへのユーザーアクセスを管理します。例えば、ユーザーがファイルを S3 バケットにアップロードできるようにします。Amplify CLI は、これらの AWS リソースのアクセス制御ポリシーを自動化し、GraphQL で細かいアクセス制御を提供して、API 内のデータを保護します。

認可は、通常は次の 2 つの方法のいずれかで行われます。

  1. クライアントがトークンをバックエンドに渡し、カスタムロジックを実行してアクションを許可または拒否する
  2. クライアントがリクエストに署名し、バックエンドが署名を検証して、事前に定義されたポリシーに基づいてアクションを許可または拒否する。事前に定義されたルールは IAM ポリシーとして知られており、Amplify CLI によって自動的に設定されます。

最初のモードは REST または GraphQL API の一般的な認可方法ですが、2 番目のモードは S3、Pinpoint などの AWS サービスとのインターフェースに必要です。

サインアップとサインイン

多くのアプリケーションでは、ユーザーのサインアップとサインインで十分です。認証されたら、アプリは API と通信してデータにアクセスおよび変更できます。この場合、Amplify CLI を使用して amplify add auth を実行し、デフォルト設定を選択して User Pool を作成できます。アプリケーションでは、Auth.signUpAuth.signIn(または Amplify UI コンポーネント)を使用してこのプロセスを完了し、トークンを取得できます。Amplify クライアントは、Auth.currentSession を呼び出してトークンが無効になった場合はトークンをリフレッシュします。Image

ソーシャルプロバイダーフェデレーション

多くのアプリケーションは、Facebook、Google Sign-In、Login with Amazon などのソーシャルプロバイダーでのログインもサポートしています。これを行うことが推奨される方法は OAuth リダイレクト経由です。これにより、ユーザーはソーシャルメディアアカウントを使用してログインでき、対応するユーザーが User Pools に作成されます。この設計では、アプリにソーシャルプロバイダーの SDK を含める必要はありません。amplify add auth を実行し、ソーシャルプロバイダーオプションを選択して設定してください。完了後、アプリケーションで Auth.federatedSignIn() を使用して、事前構築された「Hosted UI」を表示するか、プロバイダー名を渡す(例えば Auth.federatedSignIn({provider: 'Facebook'}))ことで直接インターフェースし、独自の UI を構築できます。Image また、プロバイダーのトークンを Auth.federatedSignIn() に直接渡すことで、Identity Pools から認証情報を直接取得することもできます。ただし、そのプロバイダーの SDK を直接アプリで使用し、トークンリフレッシュと認証フローを手動で管理する必要があります。

AWS サービスへのアクセス

一部のアプリケーションは、リクエストに署名することを必要とする AWS サービスを使用する必要があります。例としては、S3 にイメージまたはビデオを保存したり、Pinpoint または Kinesis に分析を送信したりすることが挙げられます。Amplify は、Cognito Identity Pool からの短期認証情報を使用してリクエストに自動的に署名し、これらの認証情報は Amplify クライアントライブラリによって自動的に有効期限切れ、ローテーション、および更新されます。amplify add auth でバックエンドを設定し、Auth.signIn を呼び出すことで、クライアントが認証された後、これは自動的に行われます。以下の図は、User Pools から JWT トークンがどのように返され、Identity Pools から AWS 認証情報がどのように返されるかを示しています。これらには、Auth.currentSession()Auth.currentCredentials() を使用していつでもアクセスできます。Image