Amazon Cognitoの認証フローを調べた

Amazon Cognitoを使う機会があったので調べたことをまとめました。

Amazon Cognitoとは

Amazon Cognitoはユーザの認証やデータ同期を提供するサービスです。

以下の3つの機能があります。

  • Cognito User Pool
    • AWSが提供する認証システム
  • Cognito Federated Identities
    • 任意の認証システムをつかったサインアップ機能の提供
  • Cognito Sync
    • ユーザデータ同期

今回はFederated Identitiesについて調べました。

Cognito Federated Identities

Cognito フェデレーテッドアイデンティティでは次の様なことができます。

  • ユーザの一意のIDを生成
  • Cognito User Poolや外部の認証システム(Facebook, Twitter等)と連携しユーザを認証
  • 権限が制限された一時的なAWS認証情報をクライアントに提供
  • 未認証ユーザにもIDを発行し一時的な認証を提供することができる

仕組み

Facebookを認証システムとして利用する場合、 iOSAndroidSDKのメソッド名等の細かい部分は異なるが大まかなフローは以下の通りです

https://github.com/takatori/blog/raw/master/entries/20170405/img/Cognito.png

  1. AWS SDKFacebookとの認証を行う
  2. FacebookがOAuthトークンをSDKに返す
  3. 取得したOAuthトークンをパラメータとしてCognitoのGetIdを呼び出す
  4. Cognitoは受け取ったトークンからidを生成もしくは既にある存在するidを取得して返す
  5. SDKが受け取ったidを指定してクレデンシャル情報取得APIを呼び出し
  6. Cognitoが一時的なクレデンシャル情報を返す

他にも認証フローがありますが、上記の方法が最も一般的なやり方のようです。

まとめ

Cognitoは機能がたくさんあり、ドキュメント分量が多いので一見複雑なことをしているように見えますが、 整理してまとめてみると意外とシンプルなフローで認証が行われていることがわかりました。 ドキュメントに書いて有ることを自分でかきなおしてみるのも結構勉強になりますね。

参考