---
title: Amazon Cognitoを用いた認証・認可の基本
tags: 
author: [株式会社エヌアイデイ](https://convert.docswell.com/user/NID_Tech)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/DJYZWLW6EM.jpg?width=480
description: 今後の社内システムやサービス開発における認証・認可技術の基礎固めを目的として、AWSが提供する認証・認可サービス「Amazon Cognito」を用い、基本的な構成の技術検証を実施しました。  エヌアイデイの若手メンバーが参加し、基礎技術の習得と実践的な経験を目的とした社内の技術検証取り組みの資料です。
published: December 24, 25
canonical: https://convert.docswell.com/s/NID_Tech/5N9Y7R-2025-12-24-141136
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/DJYZWLW6EM.jpg)

Amazon Cognitoを用いた
認証・認可の基本
2025年11月27日
(検証実施時期：2023年7-10月)
株式会社エヌアイデイ
ICTデザイン事業部ANA部 第2課 糸賀 朱音(１年目 ※検証当時)
Copyright(c)2025 NID All Rights Reserved


# Page. 2

![Page Image](https://bcdn.docswell.com/page/V7N394P178.jpg)

参加メンバー ※検証当時
ICTデザイン事業部ANA部 第2課 糸賀 朱音
ICTデザイン事業部ANA部 第2課 岩永 智樹
ICTデザイン事業部ANA部 第2課 Y.K.
(1年目)
(2年目)
(3年目)
2
Copyright(c)2025 NID All Rights Reserved


# Page. 3

![Page Image](https://bcdn.docswell.com/page/YJ992Q3YJ3.jpg)

目次
1. 検証概要
1-1. 検証目的・内容
1-2. 構成
1-2-1. 構成図①
1-2-2. 構成図②
1-3. Amazon Cognito
2. 技術要素
2-1. OAuth
2-1-1. 共通構造
2-1-2. 認可フロー
2-1-3. Client Credentials Grant
2-2. OpenID Connect (OIDC)
2-2-1. 共通構造
3. 構築
3-1. 構築①
3-1-1. 構築①_Cognito
3-1-2.構築①_API Gateway, Lambda
3-2. 構築②
3-2-1. 構築②_Google IdP(Google Cloud)
3-2-2. 構築②_Googleとの連携
3-2-3. 構築②_Cognito
3-2-4. 構築②_API Gateway, Lambda
4. 検証
4-1. 検証①
4-2. 検証②
5. まとめ
2-2-2. 認証・認可フロー
2-2-3. Authorization Code Flow
Copyright(c)2025 NID All Rights Reserved
※本資料に登場する会社名・製品・サービス名、ロゴマークなどは該当する
各社の商号・商標または登録商標です。
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/GJ895GMKED.jpg)

1-1. 検証目的・内容
◼ 検証目的・内容
サイバー攻撃の激化・高度化に伴い、今後、認証・認可の重要性と需要が右肩上がりとなること
が想定される。Amazon Cognitoを用いた基本的な構成を検証し、認証・認可の基礎技術
の確認を行う。
検証は以下の2つにわけて行う。
【検証①】
API Gateway + Amazon Cognito
認可フロー: Client Credentials Grant (OAuth2.0)
【検証②】
Amazon Cognito + Google IdP
Googleアカウントを使用したサインインの実装(OIDC)
4
Copyright(c)2025 NID All Rights Reserved


# Page. 5

![Page Image](https://bcdn.docswell.com/page/LJLWYG3P7R.jpg)

1-2-1. 構成図①
◼ API Gateway + Cognito(Client Credentials Grant) (1/2)
5
Copyright(c)2025 NID All Rights Reserved


# Page. 6

![Page Image](https://bcdn.docswell.com/page/47M9NQD2JW.jpg)

1-2-1. 構成図①
◼ API Gateway + Cognito(Client Credentials Grant) (2/2)
6
Copyright(c)2025 NID All Rights Reserved


# Page. 7

![Page Image](https://bcdn.docswell.com/page/P7RGD845J9.jpg)

1-2-2. 構成図②
◼ Cognito(Authorization Code Flow) + Google IdP (1/3)
7
Copyright(c)2025 NID All Rights Reserved


# Page. 8

![Page Image](https://bcdn.docswell.com/page/PJXX182XJX.jpg)

1-2-2. 構成図②
◼ Cognito(Authorization Code Flow) + Google IdP (2/3)
8
Copyright(c)2025 NID All Rights Reserved


# Page. 9

![Page Image](https://bcdn.docswell.com/page/3JKW2KM9JD.jpg)

1-2-2. 構成図②
◼ Cognito(Authorization Code Flow) + Google IdP (3/3)
9
Copyright(c)2025 NID All Rights Reserved


# Page. 10

![Page Image](https://bcdn.docswell.com/page/LE314ZY975.jpg)

1-3. Amazon Cognito
◼ Amazon Cognito
AWSが提供する認証・認可サービス。
外部IDプロバイダー(Google、Facebookなど)との連携をサポートし、ユーザ認証を一元管理
する。
以下の2つの主要なコンポーネントで構成される。
• ユーザプール
ユーザのサインイン/サインアップや認証成功後のトークン発行を行う
• IDプール
ユーザの認証結果を受け取り、AWSリソースへのアクセスに必要なAWS認証情報を発行する
★検証ではユーザプールのみ使用
10
Copyright(c)2025 NID All Rights Reserved


# Page. 11

![Page Image](https://bcdn.docswell.com/page/8EDXQR58JG.jpg)

2-1. OAuth
◼ 認証
通信相手が誰であるかを確認するプロセス。
ID/PWや生体認証などで、「ログインしようとしているのは誰か」を見る。
◼ 認可
リソースへのアクセスなどの権限を付与するプロセス。
ユーザに対して「何ができるのか」を決定する。
◼ OAuth とは
認可の仕組みを提供するフレームワーク。
ID/PWなどの認証情報を渡すことなく、アクセストークンを用いてリソースへのアクセス許可を制御
する。検証ではOAuth2.0を使用する。
※アクセストークン: 保護されたリソースへアクセスを行うために使用されるトークン。
特定のリソースに、限定された権限でアクセスするための証明書。
11
Copyright(c)2025 NID All Rights Reserved


# Page. 12

![Page Image](https://bcdn.docswell.com/page/V7PPLWGW78.jpg)

2-1-1. 共通構造
◼ OAuth2.0の各認可フローで共通する構造
リソースオーナ
認可サーバ
① アクセストークンを取得する。
①
(※取得方法はフローにより異なる)
② トークンを用いてリソースへアクセスする。
クライアント
②
リソースサーバ
リソースオーナ：リソースの所有者
クライアント：データを使いたいアプリやWebサイト
認可サーバ：ID/PWを管理し、トークンを発行するサーバ
リソースサーバ：データの保管場所
12
Copyright(c)2025 NID All Rights Reserved


# Page. 13

![Page Image](https://bcdn.docswell.com/page/2JV2Q869JQ.jpg)

2-1-2. 認可フロー
◼ OAuth2.0 トークン取得方法
1. Authorization Code Grant
認可エンドポイントから認可コードを取得し、トークンエンドポイントで認可コードと
アクセストークンを交換する。サーバサイドのWebアプリで利用。
2. Implicit Grant
認可エンドポイントから直接アクセストークンを取得する。
クライアントシークレットが隠せない環境で利用。
3. Resource Owner Password Credentials Grant
リソースオーナのクレデンシャル(ユーザ名・パスワードなど)を利用してトークンを得る。
クライアントと認証サーバ間の信頼性が高い場合に利用。
4. Client Credentials Grant ★検証で使用
リソースオーナへの確認を行わずにトークンのやり取りを行う。
ユーザ関与の無い、サービス間連携(マシン間通信)で利用。
13
Copyright(c)2025 NID All Rights Reserved


# Page. 14

![Page Image](https://bcdn.docswell.com/page/5EGRW5N4JL.jpg)

2-1-3. Client Credentials Grant
◼ Client Credentials Grantの認可フロー
※クライアントはコンフィデンシャルクライアント
(機密クライアント)である必要がある。
コンフィデンシャルクライアントは、その認証情報
(クライアントシークレット)を秘密にしておくことが
できるタイプのクライアント。
(対義語: パブリッククライアント)
14
Copyright(c)2025 NID All Rights Reserved


# Page. 15

![Page Image](https://bcdn.docswell.com/page/4JQV3ZQR7P.jpg)

2-2. OpenID Connect (OIDC)
◼ OIDC とは
OAuth2.0をベースに認証の仕組みを追加したプロトコル。
アクセストークンに加えてIDトークンを発行し、ユーザのID情報やログイン情報を安全にやり取り
できるようにする。
※IDトークン: ユーザが誰であるかの情報(ユーザ名、メールアドレス等)を含んだトークン。
クライアントはIDトークンを確認することで認証が成功したかを検証する。
15
Copyright(c)2025 NID All Rights Reserved


# Page. 16

![Page Image](https://bcdn.docswell.com/page/K74M13NQJ1.jpg)

2-2-1. 共通構造
◼ OIDCの各認可フローで共通する構造
① クライアント(アプリ)上でデータアクセスを伴う
③
エンドユーザ
IdP
④ トークンを発行する。
②
クライアント
② IdPへ認可要求を行う。
③ ユーザ認証とアクセス認可を行う。
④
①
操作を行う。
⑤
リソースサーバ
(※発行方法はフローにより異なる)
⑤ アクセストークンを用いてリソースへアクセス
エンドユーザ：サービス利用者
する。
クライアント：データを使いたいアプリやWebサイト
IdP：ユーザの本人確認を行い、トークンを発行するサーバ
リソースサーバ：データの保管場所
16
Copyright(c)2025 NID All Rights Reserved


# Page. 17

![Page Image](https://bcdn.docswell.com/page/LJ18G15LEG.jpg)

2-2-2. 認証・認可フロー
◼ OIDC トークン取得方法
1. Authorization Code Flow
認可エンドポイントから認可コードを取得し、トークンエンドポイントで認可コードと
IDトークン・アクセストークンを交換する。サーバサイドのWebアプリで利用。
2. Implicit Flow
認可エンドポイントから直接IDトークンとアクセストークンを取得する。
クライアントシークレットが隠せない環境で利用。
3. Hybrid Flow
Authorization Code FlowとImplicit Flowを組み合わせたフロー。
「認可コードと一部のトークンを認可エンドポイントで取得し、残りのトークンを
トークンエンドポイントから受け取る」といった動きができる。
17
Copyright(c)2025 NID All Rights Reserved


# Page. 18

![Page Image](https://bcdn.docswell.com/page/GJWZK85QJ2.jpg)

2-2-3. Authorization Code Flow
◼ Authorization Code Flowの認証・認可フロー
18
Copyright(c)2025 NID All Rights Reserved


# Page. 19

![Page Image](https://bcdn.docswell.com/page/4EZ1Z8N373.jpg)

3-1. 構築①
19
Copyright(c)2025 NID All Rights Reserved


# Page. 20

![Page Image](https://bcdn.docswell.com/page/Y76LZP8ZJV.jpg)

3-1-1. 構築①_Cognito
◼ Cognitoユーザプール設定
※UI・設定項目は検証当時(2023年)のもの
ユーザプール
test-userpool
リソースサーバ
&lt;resoueceserver&gt;
カスタムスコープ
&lt;resoueceserver&gt;/&lt;customscope&gt;
アプリクライアント
test-client01
ID
XXXXXXXXXXX
シークレット
YYYYYYYYYYY
アプリクライアント
test-client02
ID
WWWWWWWWWW
シークレット
VVVVVVVVVV
アプリクライアント
test-client03
ID
SSSSSSSSSS
シークレット
-
&lt;resoueceserver&gt;/&lt;customscope&gt;
実際の値はアプリクライアント作成時に
発行されたもの
シークレットなしのクライアントとして作成
20
Copyright(c)2025 NID All Rights Reserved


# Page. 21

![Page Image](https://bcdn.docswell.com/page/G751WK99E4.jpg)

3-1-2. 構築①_API Gateway, Lambda
◼ API Gateway, Lambda設定
※UI・設定項目は検証当時(2023年)のもの
/api
API名
test-API
プロトコル
HTTP
API ID
QQQQQQQQQQ
APIエンドポイント
https://&lt;API ID&gt;.execute-api.ap-northeast-1.amazonaws.com/api
実際の値はAPI Gateway作成時に
発行されたもの
API Gateway
XXXXXXXXXXX(test-client01のID)
Lambda
対象者以外からのアクセスは
拒否される
21
Copyright(c)2025 NID All Rights Reserved


# Page. 22

![Page Image](https://bcdn.docswell.com/page/9J21QW257R.jpg)

3-2. 構築②
22
Copyright(c)2025 NID All Rights Reserved


# Page. 23

![Page Image](https://bcdn.docswell.com/page/DEYZWLY67M.jpg)

3-2-1. 構築②_Google IdP(Google Cloud)
◼ Google IdP設定(1/2)
※UI・設定項目は検証当時(2023年)のもの
test-GoogleIdP
Cognitoのエンドポイントを設定
(/oauth2/idpresponse)
23
Copyright(c)2025 NID All Rights Reserved


# Page. 24

![Page Image](https://bcdn.docswell.com/page/VJN394R1J8.jpg)

3-2-1. 構築②_Google IdP(Google Cloud)
◼ Google IdP設定(2/2)
※UI・設定項目は検証当時(2023年)のもの
24
Copyright(c)2025 NID All Rights Reserved


# Page. 25

![Page Image](https://bcdn.docswell.com/page/YE992QMYE3.jpg)

3-2-2. 構築②_Googleとの連携
◼ CognitoとGoogle IdPの連携(1/3)
※UI・設定項目は検証当時(2023年)のもの
「アイデンティティプロバイダーを追加」を
押下
「Google」を選択
(画像はGoogle連携済みのためグレーアウトされている)
25
Copyright(c)2025 NID All Rights Reserved


# Page. 26

![Page Image](https://bcdn.docswell.com/page/GE895GLK7D.jpg)

3-2-2. 構築②_Googleとの連携
◼ CognitoとGoogle IdPの連携(2/3)
※UI・設定項目は検証当時(2023年)のもの
Google IdP作成時に発行されたもの
を入力
26
Copyright(c)2025 NID All Rights Reserved


# Page. 27

![Page Image](https://bcdn.docswell.com/page/LELWYGLPJR.jpg)

3-2-2. 構築②_Googleとの連携
◼ CognitoとGoogle IdPの連携(3/3)
※UI・設定項目は検証当時(2023年)のもの
設定後に確認できるGoogle IDプロバイダー画面
Copyright(c)2025 NID All Rights Reserved
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/4JM9NQM2EW.jpg)

3-2-3. 構築②_Cognito
◼ Cognitoユーザプール設定
※UI・設定項目は検証当時(2023年)のもの
ユーザプール
&lt;userpool_1&gt;
リソースサーバ
&lt;resoueceserver&gt;
カスタムスコープ
&lt;resoueceserver&gt;/&lt;customscope&gt;
アプリクライアント
test-client01
構築①からの変更点
ID
1. IDプロバイダーに「Google」を追加
シークレット
2. OAuth2.0許可タイプで
アプリクライアント
「認証コード付与」を選択
3. OpenID Connectのスコープで
ID
「OpenID」を選択(OIDC利用のため)
XXXXXXXXXXX
YYYYYYYYYYY
test-client02
WWWWWWWWWW
シークレット
VVVVVVVVVV
アプリクライアント
test-client03
ID
SSSSSSSSSS
シークレット
-
28
Copyright(c)2025 NID All Rights Reserved


# Page. 29

![Page Image](https://bcdn.docswell.com/page/PJRGD8V5E9.jpg)

3-2-4. 構築②_API Gateway, Lambda
◼ API Gateway, Lambda設定
※UI・設定項目は検証当時(2023年)のもの
/api
API名
test-API
プロトコル
HTTP
API ID
QQQQQQQQQQ
APIエンドポイント
https://&lt;API ID&gt;.execute-api.ap-northeast-1.amazonaws.com/api
API Gateway
XXXXXXXXXXX(test-client01のID)
Lambda
構築①からの変更点
1. 認可スコープの設定を追加
29
Copyright(c)2025 NID All Rights Reserved


# Page. 30

![Page Image](https://bcdn.docswell.com/page/PEXX18ZXEX.jpg)

4. 検証
◼ 検証項目
【検証①】
1. Client Credentials Grantでアクセストークンを取得できること
2. 取得したアクセストークンでリソース(Lambda)へのアクセスができること
【検証②】
1. Googleアカウントでのサインインが可能なこと
2. IDトークンとアクセストークンを取得できていること
3. 取得したアクセストークンでリソース(Lambda)へのアクセスができること
30
Copyright(c)2025 NID All Rights Reserved


# Page. 31

![Page Image](https://bcdn.docswell.com/page/3EKW2K89ED.jpg)

4-1. 検証①
◼ アクセストークンの取得
クライアント認証として
Basic認証を使用
“&lt;test-client01のID&gt;/&lt;test-client01のシークレット&gt;”
&lt;userpool名&gt;
&lt;resoueceserver&gt;/&lt;customscope&gt;
grant typeに「client credentials」
を指定
31
Copyright(c)2025 NID All Rights Reserved


# Page. 32

![Page Image](https://bcdn.docswell.com/page/L7314Z29J5.jpg)

4-1. 検証①
◼ アクセストークンの取得
クライアント認証に失敗した場合、「invalid_client」が返されてトークン取得が行えない。
test-client01のクライアントIDと
test-client02のクライアントシークレットで
わざと認証失敗させる
“&lt;test-client01のID&gt;/&lt;test-client02のシークレット&gt;”
&lt;userpool名&gt;
&lt;resoueceserver&gt;/&lt;customscope&gt;
32
Copyright(c)2025 NID All Rights Reserved


# Page. 33

![Page Image](https://bcdn.docswell.com/page/87DXQRZ8EG.jpg)

4-1. 検証①
◼ リソースへのアクセス
アクセス成功(有効なアクセストークン)
取得したアクセストークンを
「access_token」に代入して渡す
&lt;API ID&gt;
「Hello World!」が返ってきている
アクセス失敗(無効なアクセストークン)
&lt;API ID&gt;
アクセス許可がないことがわかる
※アクセストークンがない場合も同じ結果が返される
33
Copyright(c)2025 NID All Rights Reserved


# Page. 34

![Page Image](https://bcdn.docswell.com/page/VJPPLWDWJ8.jpg)

4-1. 検証①
◼ リソースへのアクセス
有効なアクセストークンを使用してリソースへアクセスする場合、リクエストボディにトークン取得時と
異なるクライアント情報を含めたとしてもリソースへのアクセスは行える。
取得したアクセストークンを
「access_token」に代入して渡す
&lt;API ID&gt;
&lt;test-client02のID&gt;
「Hello World!」が返ってきている
test-client02(API Gatewayの対象者で
はないユーザ)のクライアントIDを含める
34
Copyright(c)2025 NID All Rights Reserved


# Page. 35

![Page Image](https://bcdn.docswell.com/page/2EV2Q819EQ.jpg)

4-2. 検証②
◼ Googleアカウントによるサインイン &amp; 認可コード取得
Cognitoのログインページ
Googleアカウントで
サインインする
認可コードが取得できる
認可コード
リダイレクト
35
Copyright(c)2025 NID All Rights Reserved


# Page. 36

![Page Image](https://bcdn.docswell.com/page/57GRW524EL.jpg)

4-2. 検証②
◼ トークン取得
grant typeに「authorization_code」
を指定
“&lt;test-client01のID&gt;/&lt;test-client01のシークレット&gt;”
&lt;userpool名&gt;
認可コード
取得した認可コードを
リクエストボディに含める
36
Copyright(c)2025 NID All Rights Reserved


# Page. 37

![Page Image](https://bcdn.docswell.com/page/4EQV3ZPRJP.jpg)

4-2. 検証②
◼ リソースへのアクセス
アクセス成功(有効なアクセストークン)
取得したアクセストークンを
「access_token」に代入して渡す
&lt;API ID&gt;
「Hello World!」が返ってきている
アクセス失敗(無効なアクセストークン)
取得したIDトークンを
「id_token」に代入して渡す
&lt;API ID&gt;
アクセスできない
※アクセスに特定のスコープを必要としており(p.29参照)、
IDトークンはスコープの情報を持たないため
Copyright(c)2025 NID All Rights Reserved
37


# Page. 38

![Page Image](https://bcdn.docswell.com/page/KJ4M13YQE1.jpg)

4-2. 検証②
◼ ユーザ情報の取得(追加検証)
ユーザ情報エンドポイントへのリクエスト
取得したアクセストークンを
「access_token」に代入して渡す
★IDトークンを渡したリクエストはトークン内に「openid」スコープがないため、401が返される。
※OAuth2.0を使って発行したアクセストークンでも同じように情報の取得はできない。
38
Copyright(c)2025 NID All Rights Reserved


# Page. 39

![Page Image](https://bcdn.docswell.com/page/LE18G16L7G.jpg)

5. まとめ
◼ 検証結果
• Cognitoを使用してOAuthとOIDCを使用した構成を実装し、トークンを利用した通信の
やり取りについて確認した。
• アクセストークンを使用して、リソースへのアクセスが制御できることを確認した。
• OAuthとOIDCのトークンの違いについて理解した。
39
Copyright(c)2025 NID All Rights Reserved


# Page. 40

![Page Image](https://bcdn.docswell.com/page/GEWZK8WQE2.jpg)

Appendix
40
Copyright(c)2025 NID All Rights Reserved


# Page. 41

![Page Image](https://bcdn.docswell.com/page/47Z1Z853J3.jpg)

PKCE
◼ PKCE とは
認可コード横取り攻撃への対策として利用できる。
Authorization Code Flowにて、認可コード取得・トークン取得の際に
以下のパラメータを用いる。
⁃ code_verifier
⁃ code_challenge
⁃ code_challenge_method
次ページより、Authorization Code Flow + PKCE でのトークン取得までを確認する。
41
Copyright(c)2025 NID All Rights Reserved


# Page. 42

![Page Image](https://bcdn.docswell.com/page/YJ6LZP9ZEV.jpg)

PKCE
◼ Googleアカウントによるサインイン &amp; 認可コード取得
Cognitoのログインページ
URLに以下のパラメータが追加されている。
- code_challenge_method=S256
- code_challenge=XXXXXXXXXXXXXXXXXXXXXXXXXXX
Googleアカウントで
サインインする
認可コードが取得できる
認可コード
リダイレクト
42
Copyright(c)2025 NID All Rights Reserved


# Page. 43

![Page Image](https://bcdn.docswell.com/page/GJ51WKN974.jpg)

PKCE
◼ トークンの取得
“&lt;test-client01のID&gt;/&lt;test-client01のシークレット&gt;”
&lt;userpool名&gt;
認可コード
取得した認可コードを
リクエストボディに含める
YYYYYY
認可コードの検証のため、
「code_verifier=YYYYYY」を追加
43
Copyright(c)2025 NID All Rights Reserved


# Page. 44

![Page Image](https://bcdn.docswell.com/page/LE314Z2275.jpg)

ありがとうございました。
44
Copyright(c)2025 NID All Rights Reserved


