ナビゲーション PHPからNuxt.js + Vue.js、Flutterまでフルスタックの世界へようこそ PHPからNuxt.js + Vue.js、Flutterまでフルスタックの世界へようこそ
  • お客様の買い物かご
  • ログイン
  • 登録
  • カートは空です.
    ショップへ
  • Home
    • DALL-E3を無料で使おう!bing
    • 40代男性が美女に変身
    • リアルタイムボイスチェンジャー
    • TIKTOK×AIで月30万円稼ぐ
    • 2019年に既に実現していた
  • スキル
    • Laravel
      • Laravel入門
      • Laravel実践
    • PHP
      • PHP入門
      • phpl実践
    • React.js
      • React入門
      • React実践
      • Redux
    • Vue.js
      • Vue.js入門
      • Vue.jsテクニック
    • JavaScript
    • Typescript
      • Typescript入門
      • Typescriptテクニック
    • Node.js
      • Node.js入門
      • Node.jsテクニック
    • Bootstrap
      • bootstrap入門
      • bootstrapテクニック
      • AdminLTE
    • Nuxt.js
      • Nuxt.js入門
      • Nuxt.js テクニック
    • Async-Await
    • Serverless
    • Excel
      • Excelダウン・アップ
      • Excl業務管理システム
    • WordPress
      • WordPressカスタマイズ
    • Chart.js
    • ECサイト
    • markdown
    • Next.js
      • Next.js入門
    • Express
      • Express入門
    • Python
      • Python入門
      • Python実践
    • Flutter
      • Flutter入門
      • Flutterテクニック
  • ブログ
    • AIとCanva
    • Canvaの使い方
      • Canva入門(概要説明)
      • Canva入門(文字の変更と装飾)
      • Canva入門(3)
      • Canva入門(4)
      • Canva入門(5)
    • markdown
      • markdown入門
      • markdownテクニック
    • ECサイト
      • カート・サンプル
      • ECサイト構築例
    • 開発のノウハウ・小技など
    • おとぎばなし 4コマ
    • Stable Diffusion – ControlNet入門
    • Lambada開発情報
  • 会社情報

ブログ詳細

  • ホーム
  • AWS Cognitoを使うべき3つの理由

AWS Cognitoを使うべき3つの理由

libe-irevo@master 2024年2月2日

目次

Toggle
  • はじめに
  • Amazon Cognito(アマゾン コグニート)とは?
    • 1. ユーザープール
    • 2. IDプール
  • Amazon Cognitoをお勧めする、3つの理由
    • 1. パスワードなどのユーザーデータを保持しないため、安心
    • 2. GoogleやFacebook、AppleなどのID・パスワードでもログイン可能
    • 3.ログイン画面の作成が簡単
  • サインイン/ログイン画面の実装方法
    • 環境
    • 準備
      • 実装方法
        • ユーザープール作成
        • アプリクライアント作成
        • Reactアプリを作成
        • ユーザーの作成
        • グループの作成
  • まとめ
    • 関連記事:


はじめに

アプリやサービス開発者の皆様の中で「ログイン画面(サインイン画面)の作成を簡単に行いたい」「セキュリティに関わる実装の時間をなるべく少なくしたい」とお悩みの方も多くいらっしゃるのではないでしょうか。

そこで今回は、Amazon Cognito(以下、Cognito)を使った簡単なログイン画面の実装を通して、Cognitoを使うべき3つの理由をご紹介します!

記事前半ではCognitoの概要について、後半ではシンプルな認証の実装方法についてお伝えします。

Amazon Cognito(アマゾン コグニート)とは?

Cognitoとは、認証、承認、およびユーザー管理機能を提供するAWS(Amazon Web Service)のサービスです。Cognitoの主な機能は、以下の通りです。

1. ユーザープール

Cognitoの認証機能です。ユーザー管理、サインイン、サインアップを提供します。

2. IDプール

Cognitoの認証機能です。一時的なAWS認証情報を発行することで他のAWSサービスへのアクセスを許可させることができます。IDプールはユーザープールと統合する必要があります。

Amazon Cognitoをお勧めする、3つの理由

Cognitoの概要についてご理解いただいたところで、ログイン画面作成にCognitoを利用すべき3つの理由についてお伝えします。

1. パスワードなどのユーザーデータを保持しないため、安心

ユーザー管理における重要事項は、パスワードなどの機密性の高いユーザー情報を安全に保存することです。Cognitoでユーザー管理を行うと、ユーザーデータを開発者側で保持する必要がないため、安心です。

2. GoogleやFacebook、AppleなどのID・パスワードでもログイン可能

Cognitoのユーザー認証方法には、以下の2つがあります。独自の認証情報を使用しなくてもGoogleやFacebookなどサードパーティーを通じてサインインできるため、ユーザーが使いやすいログイン画面が作成できます。独自のID・パスワードを利用した認証
Cognitoに認証情報(ユーザーID、パスワードなど)を保存する必要があります

外部プロパイダーを利用した認証
Cognitoに認証情報を保存する必要はなく、Google、Facebook、Amazon、Apple経由、または SAML / OpenID Connect 経由でログインを行います

3.ログイン画面の作成が簡単

AWS Amplify(以下、Amplify)のフレームワークを利用することで、簡単にログイン画面の作成が可能です。カスタマイズも簡単なので、用意されているフォーマットから必要ない機能を削除することも可能です。

本記事でもAmplifyフレームワークを使ってログイン画面を実装するのでぜひ参考にしてみてください。

サインイン/ログイン画面の実装方法

では実際にCognitoの認証を利用して簡単なログイン画面を実装してみましょう。 今回の実装はAmplifyと、Facebookとコミュニティによって開発されているユーザインタフェース構築のためのJavaScript「React」を利用します。

Amplify本体を利用するわけではなく、Amplifyの認証ライブラリのみを利用します。

環境

Node.js : 12.18.3React : 17.0.2aws-amplify : 4.2.2@aws-amplify/ui-react : 5.0.8

準備

Amplifyパッケージをインストールaws-amplify@aws-amplify/ui-react

Reactアプリ

npx create-react-app [your_app_name]

を実行して作成されたサンプルアプリを編集していきます。

実装方法

ユーザープール作成

AWS マネジメントコンソールのサービス : 「Cognito」で「ユーザープールの管理」を選択して「ユーザープールを作成する」から新規ユーザープールを作成します。

Amazon Cognito-新規ユーザープールを作成

プール名 : 任意
「ステップに従って設定する」を選択

Amazon Cognito-メールアドレスを使用してログイン

サインイン方法
「Eメールアドレスおよび電話番号」「Eメールアドレスを許可」を選択
今回はメールアドレスを使用してログインを行います。この場合メールアドレスはユーザー毎に一意でなければなりません。

Amazon Cognito-標準属性

標準属性属性 : 「name」 を選択
独自IDが必要な場合、Cognitoでは標準属性のみ検索が許可されています。
※ 参考)ユーザーアカウントの管理と検索

また、usernameはプール内でユニークでなければならないため注意が必要です。そのため、システムで利用するために独自のIDが必要な場合はカスタム属性ではなくname等の標準属性に格納することをお勧めします。

Amazon Cognito-標準属性

パスワードの強度
最小長 : 8必須項目 : 数字, 大文字, 小文字自己サインアップ : 「ユーザーに自己サインアップを許可する」有効期限 : 7日

Amazon では、セキュリティを強化するために 8 文字以上の大文字、小文字、数字で構成されるパスワードが推奨されています。

Amazon Cognito-パスワードの強度

多要素認証 : オフアカウント回復 : Eメールのみ検証時の属性確認 : Eメール

Amazon Cognito-各種設定画面

ロール名 : 任意

Amazon Cognito-ロール名 : 任意

サイドバーから「確認」を選択して、設定を行った内容を確認します。

Amazon Cognito-設定内容を確認

「プールの作成」でユーザープールを作成します。
作成したプールIDは 後ほど必要になるのでメモしておいてください。

Amazon Cognito-ユーザープールを作成
アプリクライアント作成

サイドバーから「アプリクライアント」を選択します。
アプリクライアント名 : 任意クライアントシークレットを作成 : 作成しない
上記以外はデフォルトで作成します。
アプリクライアントIDは 後ほど必要になるのでメモしておいてください。

Reactアプリを作成

create-react-appで作成したReactアプリを編集していきます。

import { Amplify } from 'aws-amplify';
 
Amplify.configure({
  Auth: {
    // REQUIRED - Amazon Cognito Region
    region: 'XX-XXXX-X',
    // OPTIONAL - Amazon Cognito User Pool ID
    userPoolId: 'XX-XXXX-X_abcd1234',
    // OPTIONAL - Amazon Cognito Web Client ID (26-char alphanumeric string)
    userPoolWebClientId: 'a1b2c3d4e5f6g7h8i9j0k1l2m3'
  }
});

Index.jsに上記コードを追加します。
先ほど作成したユーザープールIDとアプリクライアントIDを指定します。リージョンにはユーザープールを作成したAWSリージョンを指定してください。

※ 参考)Create or re-use existing backend


import logo from './logo.svg';
import './App.css';

import React, { useState } from 'react';
import { Auth } from 'aws-amplify';
import { AmplifyAuthenticator, AmplifySignOut } from '@aws-amplify/ui-react';

function App() {
  const [user, setUser] = useState();

  async function getUserInfo() {
    const UserInfo = await Auth.currentSession()
    setUser(UserInfo.idToken.payload);
  }

  return (
    <div className="App">
      <AmplifyAuthenticator>
       <header className="App-header">
         <img src={logo} className="App-logo" alt="logo" />
            <div>UserName : {user ? user.name : "No Data"}</div>
            <div>Cognito UserName : {user ? user['cognito:username'] : "No Data"}</div>
            <div>Group : {user ? user['cognito:groups'] : "No Data"}</div>
            <div><button id='button' onClick={() => getUserInfo()}>Show User Info</button></div>
          <AmplifySignOut />
        </header>
      </AmplifyAuthenticator>
    </div>

  );
}

export default App;

App.jsを上記のように編集します。

このコードでは、Amplifyフレームワークを利用して簡単なログイン画面の表示とユーザーデータの取得を行います。ログイン後に「Show User Info」ボタンを押下して、ログインしたユーザーのデータを取得して表示します。

でラップしてログイン後の画面に何を表示するか指定します。ログインフォームをカスタマイズしたい場合は、明示的にカスタマイズしたいコンポーネントをに含めることでフォームの編集が可能です。詳細は公式ドキュメントを参照してください。

※ 参考)Authenticator(公式ドキュメント)

< AmplifySignOut >はログアウトボタンを実装します。
※ 参考)Amplifyサインアウト(公式ドキュメント)

ここまで実装できたら、アプリを起動しましょう。 うまく実装できていればAmplifyのデフォルトログイン画面が表示されるはずです。

ユーザーの作成

動作を確かめるためにCognitoに戻ってユーザーを2人分作成しましょう。

作成したユーザープールのサイドバー、「ユーザーとグループ」から「ユーザーの作成」を選択します。今回はユーザー名をメールアドレスにしたので、ユーザー名とメールアドレスは同じメールアドレスを入力してください。

Amazon Cognito-ユーザーの作成

ユーザー名 : 任意のメールアドレス仮パスワード : 任意電話番号 : 未入力でも可Eメール : 任意のメールアドレス
ユーザーが作成されるとメールアドレスにメールが送信されます。送信されるメール内容はサイドバー、「メッセージのカスタマイズ」から編集することができます。

グループの作成

認証されたユーザー内で権限を分けたい場合は、ユーザープールの「グループ」を利用しましょう。ログイン後に取得できるユーザー情報でユーザーのグループを確認して、アプリ内でグループによって挙動を変更することができます。一人のユーザーをグループに追加してみましょう。

作成したユーザープールのサイドバー、「ユーザーとグループ」からグループタブに移動して「グループの作成」を選択します。

Amazon Cognito-グループの作成

名前 : 任意説明 : 任意IAMロール : なし優先順位 : なし
ユーザープールをIDプールと連携して認可を行う場合は、IAMロールを使用して未認証のユーザーと認証済みのユーザーで異なるロールを付与することができます。
また、複数のグループを作成し適用する場合はグループの権限に優先順位をつけることも可能です。

Amazon Cognito-ユーザープールとIDプールを連携し認可

グループが作成できたら、ユーザータブに移動してグループに追加したいユーザーのページに移動します。「グループに追加」からユーザーをグループに追加します。

Amazon Cognito-グループに追加

先ほど作成したグループを選択して、「グループに追加」を押下します。

起動したアプリに戻って作成したユーザーでログインしましょう。

Amazon Cognito-仮パスワードの変更

初めてログインする際に、仮パスワードの変更とユーザープール作成時に指定した項目の入力を要求されます。今回はnameを選択したため、フォームに任意の値を入力してください。

Amazon Cognito-Reactアイコンと2種のボタン

ログインするとReactアイコンと2種のボタンが表示されます。「Show User Info」ボタンを押下してユーザーデータを表示してみましょう。

Amazon Cognito-トークンから取得したユーザーデータ

正しくアプリが動作するとCognitoが発行するトークンから取得したユーザーデータが表示されます。トークン内に追加されているグループの情報が格納されていることが確認できます。
Cognitoが発行するトークンについては、以下の参考サイトを参照してください。

※ 参考)
ユーザープールでのトークンの使用
Create or re-use existing backend

まとめ

今回は、ログイン認証の実装を通してAmazon Cognitoを使うべき理由について解説しました。本記事では省きましたが、IDプールと統合することでAWSリソースへのアクセスを許可することができます。

関連記事:

Amazon Location Serviceとは?(3)+Cognito AWS Cognitoとは? Serverlesss(AWS Lambda) Amazon Location Serviceとは?(1) Amazon Location Service+Vue.jsマップアプリケーション Amazon Location Serviceとは?(2) Serverlesss(AWS Lambda)(1)セットアップ Serverlesss(AWS Lambda)(4)ローカル環境 Serverlesss(AWS Lambda)(3)dynamodb Serverlesss(AWS Lambda)(2)cognito設定 Serverlesss(AWS Lambda)(5)dynamodb・NoSQL Serverlesss(AWS Lambda)(6)関連記事 AWS Cognitoを使用してログイン機能を実装 AWS Lambda DynamoDB でCRUD AWSとは? AWS S3入門! AWS EC2入門! AWS EC2入門(EC2を立ててログイン) AWS RDS入門(RDSでデータベースを構築する) AWS LambdaでPythonを使う AWS EC2の作成〜Apacheの起動 WinSCPでAmazon S3に接続 AWSでWeb(4)独自ドメイン名でサーバーを公開する AWSでWeb(3)EC2とRDSでWordPress AWSでWeb(2)EC2にApache構築 AWSでWeb(1)RDSでデータベースを構築する AWSのALB実装例(1)ALB+EC2+RDS AWSアカウントを作る(1) AWSアカウントを作る(2)普段使いのIAMユーザーを作る AWSアカウントを作る(3)EC2を立ててログインする
cognito,SNSログイン,AWS,Location Service

Latest Posts

  • LINE入門
  • JavaScript入門
  • JavaScript JSON編集(記事)

post categories

  • Wordpressカスタマイズ (27)
  • 勤怠管理 (8)
  • Firebase入門 (1)
  • VSCode (4)
  • 見積管理 (2)
  • Django (1)
  • EC2 (8)
  • Redux (9)
  • ガンチャート (2)
  • Android Studio (1)
  • GitHub (4)
  • 請求管理 (2)
  • サンプル集 (9)
  • AWS CLI (1)
  • Next.js (11)
  • 売上管理 (7)
  • Android Studio入門 (1)
  • GitHub入門 (4)
  • ジョブ管理 (1)
  • オブジェクト指向 (1)
  • RDS (5)
  • Chart.js (25)
  • Excelダウン・アップ (2)
  • Pixel Watch (1)
  • Python実践 (11)
  • 休暇・休日管理 (2)
  • Canva画像編集 (1)
  • ALB (1)
  • Chart.js入門 (5)
  • Excl業務管理システム (12)
  • Dartテクニック (2)
  • AWS (38)
  • 資産管理 (2)
  • Docker Compose (1)
  • Terraform (1)
  • Chart.js実践 (23)
  • Flutter (11)
  • Flutterテクニック (2)
  • WSL2 (2)
  • リード管理 (1)
  • LINE (1)
  • S3 (3)
  • Wordpress (31)
  • AdminLTE (3)
  • Flutter入門 (8)
  • Next.js入門 (8)
  • CI/CD (2)
  • イベント管理 (2)
  • LINE ステップ (1)
  • APACHE (3)
  • 越境サイト (8)
  • AdminLTE‐Laravel版 (2)
  • Dart (8)
  • Express (4)
  • SQL (6)
  • Dashboard (1)
  • AWSアカウント (7)
  • アーキテクチャ図 (1)
  • スクール (1)
  • AdminLTE実践 (3)
  • Dart入門 (6)
  • Express入門 (4)
  • Linux (3)
  • CRM (3)
  • コンテナ環境 (3)
  • ドメイン (1)
  • クラウドSC (1)
  • Canva (1)
  • Java (2)
  • Python (15)
  • 小技集 (12)
  • RFM分析 (2)
  • API Gateway (2)
  • 予約システム (1)
  • Laravel (11)
  • Java入門 (2)
  • Python入門 (13)
  • 業務システム (18)
  • SFA (2)
  • DynamoDB (6)
  • Async-Await (1)
  • Laravel入門 (11)
  • Kotlin入門 (1)
  • Go言語 (1)
  • 顧客管理 (7)
  • FuelPHP (4)
  • Cognit (10)
  • phpl実践 (12)
  • PHP入門 (9)
  • Kotlin (1)
  • Go言語入門 (1)
  • 従業員管理 (2)
  • FuelPHPの入門 (4)
  • CRUD (2)
  • React.js (16)
  • Laravel実践 (4)
  • Swift (3)
  • docker (4)
  • 給与管理 (2)
  • CakePHP入門 (1)
  • Amazon Location Service (6)
  • React入門 (9)
  • PHP (12)
  • Swift入門 (3)
  • docker入門 (4)
  • タスク管理 (1)
  • CakePHP実践 (2)
  • AWS Amplify (11)
  • React実践 (7)
  • REST API (4)
  • Firebase (1)
  • VSCode入門 (2)
  • プロジェクト管理 (3)
  • Cake (3)
  • SNSログイン (4)
  • Nuxt.js (20)
  • Nuxt.js入門 (10)
  • Nuxt.jsテクニック (14)
  • Vue.js (23)
  • Vue.js入門 (10)
  • Vue.jsテクニック (19)
  • Node.js (8)
  • Node.js入門 (3)
  • Node.jsテクニック (7)
  • Bootstrap (18)
  • bootstrap入門 (1)
  • bootstrapテクニック (17)
  • Typescript (17)
  • Typescript入門 (2)
  • Typescriptテクニック (15)
  • Excel (16)
  • Excelダウンロード (3)
  • Excleインポート (3)
  • markdown (6)
  • markdown入門 (1)
  • markdownテクニック (3)
  • ECサイト (8)
  • カート・サンプル (3)
  • ECサイト構築例 (8)
  • JavaScript (15)
  • Serverless (19)
  • SHOP (4)
  • その他の技術情報 (20)

Post Tags

AdminLTE Android Studio Async-Await AWSアカウント bootstrap Modal ChatGPT CRM CSRF docker Docker Compose ECサイト構築例 Excel Excelダウンロード Firebase Firebase入門 GitHub GitHub入門 Go言語入門 IAMユーザー INSERT javascript lambda Laravel MySQL Nestjs Next.js PHPer Python総合学習【GUI編】 Python総合学習【オブジェクト指向編】 Python総合学習【データベース操作編】 Redux SELECT Serverless TypeScript Typescript実践 Vue.js入門 カスタム投稿 カート・サンプル ガンチャート コンテナ環境 サンプル集 勤怠管理 従業員管理 時給制 顧客管理
Copyright © Chiba Syetems All rights reserved