こんにちは!
アプリケーション開発の中でも、認証と認可は複雑化しやすい部分ですよね。
弊社では、AWS での認可・認証は Congito を使用して構築するケースがほとんどです。(稀に OpenIDConnect と組み合わせて認証を実装するケースもあります)
本記事では、弊社で多くの採用事例をもつ Cognito の概念について解説します。
Cognito には、ユーザープールと ID プールと呼ばれる2つの大きな機能/概念があります。Cognito を触る際は、まずこれらについて深く理解しなければいけません。
まずそれぞれの役割を簡単に書くと、下記の表のようになります。
ユーザープール | AWS 内での認証を扱うサービスです。 ユーザープールへのサインイン後に入手できるユーザープールトークンを使用し API Gateway, AppSync などの AWS サービスへの認証アクセス可能になります。 |
IDプール | AWS 内での認可を扱うサービスです。 STS トークンを発行可能で、IDP 指定を柔軟に行えます。( Twitter, Google 等) |
ここで最も重要なのは、ID プールの IDP にユーザープールを指定可能な点です。つまり、ユーザープールトークンと ID プールトークン ( STS ) は交換することが可能です。
これを理解するには、実際の認証のシナリオを見るのが最短です。
弊社で最も採用事例の多いシナリオを紹介します。このシナリオは弊社の得意技術でもある Amplify フレームワークでも採用しているシナリオです。
これを見ると、まずユーザープールへサインインし、その後に ID プールトークンを取得しています。(ユーザープールトークンと ID プールトークンを交換可)
また、このようなケースではユーザープールに対してユーザーグループを設定するのが通常です。
これは、アプリケーション開発の要件でよくある「特定のユーザーグループにのみ操作を許容する」といった、ユーザーパーミッションの実装を行えます。
ユーザープールトークン → ID プールトークン交換の際、ユーザーグループを判別して付与する STS ( ロール ) をグループによって切り替えることができます。
ID プールの認証プロバイダーで、ユーザープールを見てみましょう。
「認証されたロール」とあります。これがユーザーグループに応じて付与する権限を切り替えることを可能にしてくれます。
Cognito は下記のようなケースで有効だと言えます。
ここで、認証だけで言えば Auth0 などで ID トークンを取得するだけで済みますが、 Cognito は AWS サービスへのアクセス認可を行うことが可能です。
Cognito を使用すれば、AWS サービスにおける認証・認可の仕組みを容易に実装できます。ユーザーグループを活用すればプログラミングコストの削減にもなりますね。
わたし達はAWSでのアプリケーション開発では必ずと言えるほど Cognito を使用します。Cognito に関する不明点はお気軽にご相談ください。
スモールスタート開発支援、サーバーレス・NoSQLのことなら
ラーゲイトまでご相談ください
低コスト、サーバーレスの
モダナイズ開発をご検討なら
下請け対応可能
Sler企業様からの依頼も歓迎