業務の方で認証基盤のリプレイスを行っていて、その際に行ったサービス選定のメモです。
自身が身を置いている会社のサービスでの認証基盤は、パスワードをDBで管理している状態で危殆化リスクがあったり、強固な認証(MFAなど)を入れづらい状態にありました。
今では様々なプロダクトが、認証の処理は他のサービスに任せる傾向にあると認識しております。そもそもセキュリティの分野は奥が深い(自身もほとんど理解できていない)ですし、プロダクトの成長にフォーカスしたいのに、セキュリティの分野に時間を割くのは悪手でしょう。
自社のプロダクトも例にもれず、プロダクトの開発自体にフォーカスするために認証サービスを導入しようという運びになりました。
サービス候補選び
調べてみると想像より多くのサービスが存在することがわかりました。
- Amazon Cognito
- AWS Amplify Authentication
- Auth0
- Firebase Authentication
- Google Identity Platform
- Azure Active Directory B2C
- Okta Identity Cloud
- IBM Cloud Identity
- Akamai Identity Cloud
- Salesforce Identity
- SAP Customer Data Cloud
もちろんこれらのドキュメントをそれぞれ読み込んで、自社のプロダクトの性質とマッチしたサービスを選ぶことが重要ですが、あまり多くの時間を割きたくはないです。
そこで、自身が担当していないプロダクトにおいて利用事例のあるサービスや利用しているIaaS内部に含まれたサービスに絞って比較を行いました。
この時点で下記の3つのサービスが候補となります。
- Amazon Cognito
- Firebase Authentication
- Auth0
それぞれを下記のような面からみていきます。
- コスト
- 移行プラン
- 高度なセキュリティ機能
Amazon Cognitoの特徴
コスト
- 50000人まで無料
- 以降は1人あたり0.0055USD
- 高度なセキュリティ機能利用だと一人あたり0.050USD追加
https://aws.amazon.com/jp/cognito/pricing/
移行プラン
高度なセキュリティ機能
- 侵害された認証情報の確認
- 怪しい人には2段階認証させる
- 特定IPブロック
Firebase Authenticationの特徴
コスト
- 無料(Sparkプラン) 電話認証が月1万回まで
- 有料(Blazeプラン) 電話認証が従量課金
移行プラン
- Firebase CLIでCSV or JSONからインポート
- Firebase Admin SDKでインポート
- ref: https://firebase.google.com/docs/auth/admin/import-users?hl=ja
高度なセキュリティ機能
- 特になし
Auth0の特徴
コスト
- プランによって様々
- 無料でも利用可能
- ref: https://auth0.com/jp/pricing
移行プラン
- エンタープライズプランだと自動マイグレーションを利用した都度移行が可能
- JSONファイルで一括、またはDBに直接つないで一括移行
高度なセキュリティ機能
- パスワード侵害の検出(エンタープライズプランのみ)
- ボットやブルートフォースアタックの検出
- IPスロットリング
- ref: https://auth0.com/docs/attack-protection
結論
採用したのはAuth0でした。機能面との考慮でCognitoが最もコスパ良いのですが、背景としては下記のような事が挙げられます。
- ドキュメントが豊富
- 自社のプロダクトでの導入実績あり&認証基盤を統一したいモチベーションもある
- M2M認証がアドオンとして提供されていて、他の仕組みが作りやすい
基本的に利用しやすさの面での採用が大きかった気がします。実際に導入を進めていますが、情報が充実しており、今の所困った点はありません。
終わりに
選定にあたり参考となったサイトを挙げておきます。このサイトから辿れるBoothもとても参考になりました。