1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Cognito 使い方ガイド:1時間でログイン画面を自作するハンズオン (Vite + JavaScript)

1
Posted at

Amazon Cognito セットアップ手順

今回はAWSを使って素早く簡単にユーザーのサインアップ/サインインおよびアクセスコントロールの機能を追加できるAmazon Cognitoを利用してみる編です。1時間程度でCognitoを利用したログイン機能が作成できます。

簡単に以下のログイン画面ができます。しかもこの画面は 自分で作成したものではなく、Congnitoが用意しているもの です。もはやログイン画面を自作することはなくなりますね。

image.png

資格勉強的にはCognitoのユーザープールが何かを確認しつつ、手っ取り早くログイン画面の作成するための手順になっています。

興味がある方は読んでみて下さい。

作業手順

ステップ 1: ユーザープール作成の開始

AWSマネジメントコンソールの画面で操作します。
Amazon Cognitoサービス画面で、新しいユーザープールの作成を開始します。

image.png

  • 画面右上の 「ユーザープールを作成」 ボタンをクリックします。

ステップ 2: アプリケーションリソースの設定(従来のウェブアプリケーション)

ユーザープール作成の最初のステップで、アプリケーションタイプや識別子を設定します。

image.png

  • アプリケーションタイプ: 「従来のウェブアプリケーション」 を選択します。
  • アプリケーション名: 「My web app - e1c9rk」 と自動的にランダムな文字列が入力されます(任意の名前で問題ありません)。

image.png

  • サインイン識別子: 今回はログインにメールアドレスを使用する設定にするため、 「メールアドレス」 のチェックボックスを選択します。
  • 最後に画面右下の 「ユーザーディレクトリを作成する」 ボタンをクリックします。

ステップ 3: GitHubリポジトリの作成

認証画面用のhtmlとJavaScriptを動作させるための環境を用意します。
最近では様々なサービスが用意されていますが、今回はサクッと試せるGitHubのCodespacesで行います。

それでは、認証プロジェクトのコードを管理するために、GitHub上で新しいリポジトリを作成します。

image.png

  • Repository name: 任意の名前でOKですが、今回は 「cognito-with-javascript」 としました。
  • Visibility: このコードは公開する必要がないので、 「Private」 を選択します。
  • 「Create repository」 ボタンをクリックして専用のリポジトリ作成します。

ステップ 4: GitHub Codespaces の初期化

ブラウザ上で開発環境を構築するため、GitHub Codespaces を利用します。

image.png

  • 「Create a codespace」 ボタンを押した後、「Create new codespace」 ボタンをクリックしてサクッと作成します。

image.png

ステップ 5: プロジェクトのセットアップとライブラリのインストール(事前確認)

Congnitoの画面のQuick Setup ガイドに沿って認証画面のセットアップを行っていくため、事前にその内容を確認します。
今回は JavaScript で実装するので JavaScript を選択します。
Quick Setup ガイドはCongnitoの画面の左側メニュー、 アプリケーションクライアント を選択した先に用意されています。

image.png

image.png
image.png
画像イメージは加工していますが、Quick Setup ガイドにはauthorityやclient_idが自動的に入力されているので便利です。

ステップ 5: プロジェクトのセットアップとライブラリのインストール

それではGitHubに戻り、GitHub Codespaces ターミナルを使用して、Viteを使ったプロジェクトの初期化と必要なライブラリのインストールを行います。

以下のコマンドを順に実行します。

npm create vite@latest oidc-sample -- --template vanilla
cd oidc-sample
npm install
npm install oidc-client-ts
touch main.js

ステップ 6: OIDCクライアントの設定 (main.js)

oidc-client-ts ライブラリを使用して main.js ファイルにOIDCの設定を記述します。
具体的には以下のauthority/client_id/redirect_uri/cognitoDomainを、自身のCognito環境の設定値に書き換えます。

// main.js の例
import { UserManager } from "oidc-client-ts";

const cognitoAuthConfig = {
    authority: "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_xxxxx",
    client_id: "xxxxx",
    redirect_uri: "https://xxxxx.cloudfront.net",
    response_type: "code",
    scope: "email openid phone"
};

// create a UserManager instance
export const userManager = new UserManager({
    ...cognitoAuthConfig,
});

export async function signOutRedirect () {
    const clientId = "xxxxx";
    const logoutUri = "<logout uri>";
    const cognitoDomain = "https://ap-northeast-xxxxx.auth.ap-northeast-1.amazoncognito.com";
    window.location.href = `${cognitoDomain}/logout?client_id=${clientId}&logout_uri=${encodeURIComponent(logoutUri)}`;
};

authority(ユーザープールIDの一部)や client_id 等は自身の環境で作成されたものを使用してください。(またはQuick Setup ガイドの内容を貼り付けます)

ステップ 7: サインインUIの実装 (index.html)

index.html ファイルにサインインボタンと、それをクリックした際のロジックを追加します。

以下が、 index.html HTML内のボタン要素とスクリプト記述部分です。

<!-- index.html の例 -->
<body>
    <!-- 赤枠箇所: サインインボタン -->
    <button id="signIn">Sign In</button>

    <script type="module">
        import { userManager } from "./main.js";

        // 赤枠箇所: クリックイベント
        document.getElementById("signIn").addEventListener("click", () => {
            userManager.signinRedirect();
        });
    </script>
</body>

ステップ 8: 最終テストと実行

GitHub Codespaces ターミナルで開発サーバーを起動し、ログインテストを行います。

ターミナルで npm run dev を実行してローカルサーバーを起動して、アクセスしてみましょう。
成功していれば割とオシャレな以下の画面が表示されます。

image.png

  • 最初は登録者がいない状態のため、画面下部の Create an account から、自身のメールアドレスを使ってサインインフローを確認します。

image.png

メールアドレス確認用のメールが届くので認証しましょう。するとログインできるようになり、Congnitoの ユーザ メニューからもユーザが登録されたことを確認できます。

image.png

まとめ

手順は以上です。簡単でしたね。
GitHub Codespacesを活用することで、環境構築の手間を省きつつ、Amazon Cognitoを使った認証フローを素早く試すことができます。
ぜひ試してみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?