SPAを安全で安価に構築するために、AWS Cognito, Azure AD B2C, Firebase Authentication, SuperTokens, Auth0, を比較する

SecurityTokeyn

JWTトークンでの認証をコストを最小化して安全に運用したい

SPAの構築でJWTでの認証をどのように構築するべきか、コストを最小化して運用上のリスクが少ないシステム設計を検証している。

Webで検索したところ、主要な認証サービスについてそれぞれの情報は豊富に見つかるのだが、コストを比較した情報が少なかったので一覧表を作成して備忘録に残します。


JWTトークンを発行する認証サービスを提供している主要サービスの一覧

サービス名 無料プラン 主な料金1 主な料金2 料金情報URL
AWS Cognito UserPool 50000MAUまで無料 10万MAUまで$0.0055/MAU 100万MAUまで$0.0046/MAU https://aws.amazon.com/jp/cognito/pricing/
Microsoft Azure AAD B2C 50000MAUまで無料 PREMIUM P1=$0.00325/MAU(AD登録が必要) PREMIUM P2=$0.01625/MAU(AD登録が必要) https://azure.microsoft.com/en-us/pricing/details/active-directory/external-identities/
Firebase Authentication 10000MAUまで無料 無料枠内でも電話SMS認証は有料$0.06/件 Firebaseの無料枠が利用可能だが、10000MAU内でも無料枠を超えると料金が発生 https://firebase.google.com/pricing
SuperTokens 5000MAUまで無料 5000MAU毎に月$29追加課金 ※OSS版をホスティングすれば継続して無料利用可能 https://supertokens.com/pricing
Auth0 試用期間22日間 ユーザDBなし・1000MAUまで$15/月~ ユーザDBあり・1000MAUまで$49/月~ https://auth0.com/pricing


コストを抑えて運用リスクも低減したい場合

SaaSでの構築運用はAWS CognitoとAzure ADB2Cのコスパが突出している

AWS CognitoとAzure ADB2Cどちらも50000アカウントまで無料利用できてコスパが突出している。但し、Cognitoを使うにはAWSを契約してIAMやSESの知識が必要になるし、AzureADを使う場合はAzureを契約してAD構築と管理の知識が必要になる。
大手クラウドの中ではFirebaseの無料枠はAWSやAzureの1/5しかなく、単位コストも割高なのだが、FirebaseでWebアプリケーションを構築する人はFirebase Authenticationが候補になるだろう。


コスト最小化を優先する場合

SuperTokensだけがOSSで自前でホスティングが可能

候補の中でSuperTokensだけがOSSで自前でもホスティングして構築運用できるので、万全に運用ができるなら、SuperTokensを構築することで無制限に無料でアカウント認証の運用が可能になる。SaaS版でも5000MAUまでなら継続的に無料利用が可能。
但し、SDKはJava,Node.js,Pythonの3種類しか提供されておらず、Node.js系はReactのサンプルが中心なのでOSSを扱うための制約も大きい。更に公開エンドポイントとデータストアも自前管理する必要があるのでリスクも大きくなる。


構築の容易さやSDKやサービスの情報の入手し易さを優先する場合

Auth0であれば大手クラウドサービスに依存せずSDKも殆どのプログラム言語に対応している

コストよりも、大手クラウドサービスに依存せずにJWT認証を簡単に構築したい場合はAuth0が適しているかもしれない。
但し、無料利用枠が実質的に存在しておらず、安価なプランでは1000MAUまでしかサポートされないので、不特定多数へ提供する公開サービスで利用するのはリスクが高い。


まとめ

既に大手のクラウドサービス、AWS Cognito・Azure ADB2C・Firebase Authentication、3社いずれかを使っている場合は利用中のプラットフォームを選択することが最もコスト対効果が高いと思われる。

  • AWS Cognito
    CognitoはAmplifyとIDプールを不自然に推していたので良い印象がないのだが、ユーザープール単体のサービス価格で考えるとコスパは非常に高い。そして全てのプログラム言語のSDKも揃っているしWebから参考情報も得やすい。

  • Azure AD
    AzureもCognitoと同レベルでコスパが高いのだが、AD構築のコストとADの特殊性を理解して導入する必要がある。

  • Firebase Authentication
    良くも悪くもFirebaseの作法に従う必要がある。GCPとの連携も他のサービスよりも有利だが、Google系のサービスでよくある「できそうに見えてできない」事があったり「Googleなのでサポートは一切なし」だったりする場合もある。

  • SuperTokens
    OSSなので独自ホスティングしてゼロコストで構築運用が可能で、OSSをCloneして解析して独自に改良してForkすることもできる。しかし、情報が少ないのでリスクは高い。(※Apache2.0ライセンス)

  • Auth0
    公式の情報が豊富でSaaSとして非常によいサービスなのだが、無料枠がなくて高額な料金と複雑な料金プランしかない点は契約前に確認したほうがいい。1000MAU未満で運用できるなら候補になるかも。

  • 独自実装も場合によって検討する価値はある
    主要なプログラミング言語であればJWTを構築できるパッケージは多数存在しているので、開発チームに余力があるなら独自実装をしてセキュリティの堅牢化や最適化をする選択肢もありえる。


AWS Cognitoで構築するシステム構成案