Slide 1

Slide 1 text

Cognitoを使おう お手軽ユーザー認証

Slide 2

Slide 2 text

自己紹介 ● 名前 ○ 松永勇太 ● 出身地 ○ 滋賀県 ● やってること ○ スポーツIoTLT主催 ○ AWSを使った開発 ● 昔やってたこと ○ 鳥人間コンテスト ○ 梅キャン勉強会主催

Slide 3

Slide 3 text

皆さん、ユーザー認証機能 の実装してますか?

Slide 4

Slide 4 text

ユーザー認証はCognitoを使いましょう

Slide 5

Slide 5 text

Cognitoとは ● ユーザー認証 ● ユーザーデータの管理 ● 外部の認証サービスとの連携 をフルマネージドで行ってくれるAWSサービス

Slide 6

Slide 6 text

今回の内容について ● 話すこと:Cognitoユーザープール ○ ユーザー認証・管理を行う ● 話さないこと:CognitoIDプール ○ 他の認証サービスとの連携を行う

Slide 7

Slide 7 text

ユーザー認証の基本(ざっくり) ユーザー認証がやりたいことはユーザーの本人確認 ユーザーは自分自身であることを証明するものが必要

Slide 8

Slide 8 text

ユーザー認証の基本(ざっくり) ウェブアプリでは本人確認をログインという形で行う メールアドレス・パスワード アクセストークン

Slide 9

Slide 9 text

ユーザー認証の基本(ざっくり) アクセストークンがユーザーの身分証明書代わりになる トークン

Slide 10

Slide 10 text

ユーザー認証を作るために必要なこと 1. ユーザー作成 a. ユーザーを識別するための固有の IDが必要 b. メールアドレスを登録させるなら検証をする c. 二段階認証をするなら電話番号も登録する 2. ログイン a. IDとパスワードからアクセストークンを生成 b. アクセストークンの有効期限を設定 c. ログアウト時にアクセストークンを削除 3. ユーザー権限 a. 一般ユーザーと管理者で使える機能が変わる b. あるユーザーの権限の変更も生じるかもしれない このすべて、Cognitoに任せましょう! あくまで一例。 実際はもっと多くの機能が必要

Slide 11

Slide 11 text

サーバーレスで行うCognito認証 ユーザー作成はsignUpというAPIを一つ呼ぶだけ Lambda から SignUpメソッドを呼ぶ ユーザー情報の管理と メール検証を行う

Slide 12

Slide 12 text

サーバーレスで行うCognito認証 ログインも同じくsignInというAPIを一つ呼ぶだけ Lambda から SignInメソッドを呼ぶ 3つのトークンを返す ● IDトークン ● アクセストークン ● 更新トークン

Slide 13

Slide 13 text

サーバーレスで行うCognito認証 アクセストークンの検証にはLambdaは不要 API Gatewayにアクセストークンの ヘッダー付きのリクエストが呼ばれる カスタムオーソライザーとして直接呼ばれる。 そのまま検証結果を返す

Slide 14

Slide 14 text

サーバーレスで行うCognito認証 Amplifyを使うとクライアントアプリからの直接の呼び出しが可能 Amplifyはアプリケーションのデプロイを行うための AWSサービス

Slide 15

Slide 15 text

グループ機能で権限管理 グループ機能とIAMロールを連携させることでユーザー権限を管理できる グループ2 グループ3 グループ1

Slide 16

Slide 16 text

Cognitoを使う利点 1. 実装量が減る a. 工数の削減 b. 責任範囲をAWS側に押し付ける c. テストする項目が減る 2. サーバーレスと相性がいい a. サーバーレスでシステムを組むなら必須 b. Lambdaトリガーを組み合わせてより柔軟な開発が可能 3. 必要に応じてセキュリティレベルを上げられる a. 数回クリックで有効化 b. 料金は割増になるので注意

Slide 17

Slide 17 text

Cognitoの欠点 1. 属性・カスタム属性がイケてない a. 属性とはCognitoで管理するユーザーデータ b. StringかNumberしか指定できない c. カスタム属性の途中変更はできない(一度消す必要がある) 2. データの取得・操作が自由にできない a. 検証コードの取得・変更ができない b. ユーザーデータの取得に回数制限がある c. クエリ操作ができない( KVS以下)

Slide 18

Slide 18 text

まとめ ● Cognitoは ○ ユーザー認証・管理を行うためのサービス ○ サーバーレスとの相性がいい ○ サーバサイドの実装量を減らすことができる ● しかし ○ 当然フルマネージドサービスであるゆえの欠点もある ○ 目的に応じた取捨選択が必要