From f482081af2e16c8eacbac648d7738535ec648fb4 Mon Sep 17 00:00:00 2001 From: Joel Coutinho Date: Tue, 30 Jul 2024 17:03:08 +0530 Subject: [PATCH 1/2] updates auth0 alternatives blog --- .../index.md | 288 +++++------------- 1 file changed, 83 insertions(+), 205 deletions(-) diff --git a/content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/index.md b/content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/index.md index 455128f8..892c662f 100644 --- a/content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/index.md +++ b/content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/index.md @@ -1,246 +1,124 @@ --- -title: "Top Auth0 alternatives: Auth0 vs Okta vs Cognito vs SuperTokens [2023]" +title: "Top Auth0 alternatives: Auth0 vs Okta vs Cognito vs SuperTokens [2024]" description: "An in depth review of Auth0 alternatives for 2023: Auth0 vs Okta vs Cognito vs SuperTokens" -date: "2022-05-09" +date: "2024-07-11" cover: "auth_comparison_header.png" category: "featured" author: "Joel Coutinho" --- -Need authentication but not sure who to go with? Read on for an in-depth comparison of the leading authentication providers. +When it comes to choosing an authentication provider, businesses have several options. This comparison of Auth0, Okta, Cognito, SuperTokens, and other tools will help you make an informed decision based on key features, pricing, limitations, and when to use each solution. + +## Table of Contents -## Table Of Contents: -- [Introduction](#introduction) -- [Auth0 and Okta](#auth0-vs-okta) -- [Amazon Cognito](#cognito) - [SuperTokens](#supertokens) +- [Okta](#okta) +- [Keycloak](#keycloak) +- [Cognito](#cognito) +- [What to Look for in an Auth0 Alternative?](#what-to-look-for-in-an-auth0-alternative) - [Conclusion](#conclusion) -## Introduction -Solutions that authenticate and manage users’ access to a system have never been more important. - -In today's post, we will be looking at some of the leading Authentication providers, breaking down their features and pricing so you can decide if they fit your requirements. - -## Auth0 vs Okta - -![Auth0 logo](./auth_okta.png) - -### Auth0 - -Auth0 is an authentication and authorization software as a service platform. It started in 2013 as an identity management service to allow developers to easily connect their apps to enterprise and social providers. - -Over the years they have scaled their services, achieved compliance certifications, and added more features. Today they are one of the leading Auth providers in the space. +## SuperTokens +SuperTokens is an open-source authentication solution designed for developers who want flexibility and control over their authentication flow. -### Okta -Okta is another leader in the authentication and authorization space, but, with a focus on workforce identity and integration with other enterprise services. +### Key Features +- Open-source and self-hosted +- Easy integration with frontend and backend frameworks +- Support for various authentication methods including email/password, social login, and passwordless +- Granular control over sessions and JWTs +- Advanced security features like anti-CSRF and token theft detection -On May 3, 2021, Okta announced they had acquired Auth0 for $6.5B. This brought a lot of attention to Auth0. Okta is notorious for being a sales-focused company and many speculate that this practice will trickle down to Auth0. You can learn more about what that means for the market [here](https://supertokens.com/blog/the-real-reason-okta-spent-on-auth0). +### Pricing +SuperTokens offers a free open-source version. For managed services, pricing starts at $25 per month for the Pro plan, which includes features like managed hosting, priority support, and custom domain support. Enterprise pricing is available on request and includes additional features such as SLA, dedicated support, and custom SLAs. -### So what is the difference between Auth0 and Okta? +### Limitations +- Requires self-hosting and management for the open-source version +- Limited integrations compared to some commercial solutions -As mentioned previously Okta’s main focus is workforce identity. Although they do offer customer identity solutions, pricing for these plans is billed annually and it can be [extremely expensive](https://www.okta.com/pricing/#customer-identity-pricing). After the Auth0 acquisition, Okta now encourages developers who are looking for more affordable auth solutions to use Auth0 +### When to Use It +Use SuperTokens if you need a flexible, open-source solution with strong session management and advanced security features, and are comfortable managing your own infrastructure. -### Advantages of using Auth0 +## Okta -#### Simple Setup: -- Setting up authentication in your app with Auth0 is simple. The docs are well written, accessible, and also provide demo apps. +Okta is a comprehensive identity management solution designed for large enterprises needing advanced features and integrations. -#### SDK and Integration support: -- They support over [60 SDKs](https://auth0.com/docs/libraries) and [50 integrations](https://auth0.com/docs/customize/integrations), meaning if you have a use case, Auth0 will probably have an SDK to support that framework and integration to support that service. +### Key Features +- Robust single sign-on (SSO) capabilities +- Multi-factor authentication (MFA) +- Lifecycle management for users +- API access management +- Extensive integration ecosystem -#### Feature set: -- Auth0's wide breadth of features is one of its largest selling points. Whether you are an indie developer looking for email-password login for your side project or a massive enterprise that requires enterprise connections and MFA Auth0 will have you covered. +### Pricing +Okta's pricing is tiered: +- **Workforce Identity**: Starts at $2 per user per month for single sign-on. Advanced features like MFA and lifecycle management are available at higher tiers. +- **Customer Identity**: Starts at $23 per month for 1,000 MAUs. Advanced features like adaptive MFA and API access management are priced higher. -### Disadvantages of using Auth0 +### Limitations +- Can be expensive for small businesses +- Complex setup and configuration for advanced features - #### Expensive -- One of the biggest reasons people switch away from Auth0 is how expensive their pricing can get. To give some context Auth0’s free plan allows for up to **7000 MAUs** and up to two social connections. This is fine for small projects but as your business starts to scale, Auth0’s pricing starts to scale much faster. For example, if you have around **7000 MAUs** and have enterprise connections enabled you can expect to pay around **$1800/month**. -- If you need to migrate your users, you would need to have an enterprise plan to export your user's password hashes. -- There are also hidden costs associated with Auth0, as soon as you hit the limits of essential and professional tiers you will need to upgrade to their enterprise tier plans which start at $30,000/year but scale to 6 and 7 figures. +### When to Use It +Use Okta if you are a large enterprise requiring extensive integrations, robust security features, and comprehensive identity management. -#### Opaque Pricing: -- After **10000 MAUs**, Auth0’s pricing for plans becomes completely custom. This makes it hard for developers who are evaluating Auth0 to know how much they would have to pay once their product scales past the boundaries of the base plans. +## Keycloak -#### Extensibility: -- Auth0's rules, hooks, and actions all provide ways for extending and customizing Auth0s service but you are limited by the number of flows they allow you to customize. -- Auth0’s extensibility options don't allow you to change the logic of a flow. -- To use this feature you have to add your code to their dashboard. This makes maintaining the code a hassle. +Keycloak is an open-source identity and access management solution aimed at developers who need customizability and control. -## Auth0 Pricing: +### Key Features +- Open-source and self-hosted +- SSO and identity brokering +- Supports OAuth2, OpenID Connect, and SAML +- User federation and social login +- Admin console for user and role management -#### Free Plan -Auth0’s free plan allows having up to **7000 MAUs** and up to 2 social connections and 3 Actions, Rules, and hooks. +### Pricing +Keycloak is free to use as it is open-source. Costs are associated with hosting and maintenance, which can vary depending on the infrastructure and scale. -![Auth0 free plan](./auth0_free.png) +### Limitations +- Requires self-hosting and management +- Steeper learning curve for setup and configuration -#### Paid Plans -Auth0 splits its paid plans into two sections based on your use case, with each use case having a free, professional, and enterprise tier. In both cases, the enterprise tier has fully custom pricing and you need to talk to their support team. +### When to Use It +Use Keycloak if you need a customizable, open-source solution with comprehensive SSO and identity brokering capabilities, and have the resources to manage it. -**Use Case 1: Business to Consumer** -- The essential plan allows for up to **10,000 MAUs**, unlimited social login, custom domains, and user role management. -- The professional plan adds multifactor authentication, the ability to connect your own database, and additional action, rules, and hooks - -![Auth0 B2C](./auth0_B2C_pricing.png) - -**Use Case 2: Business to Business** -- The essential plan offers enterprise connections, multi-factor authentication, user role management, and organisations. -- The professional plan allows you to connect your own database and increases the number of organisations and the actions, hooks, and roles. - -![Auth0 B2B](./auth0_B2B_pricing.png) - -### So is Auth0 the way to go? -Auth0 has all the functionality you need and is easy to set up and integrate with, but their pricing doesn't scale well and it can become very expensive as your userbase grows and you require more features. - -### Auth0 Alternatives -Auth0 is one of the biggest competitors in the space, but, it's high price tag has resulted in a demand for alternatives. In this post we are going to be looking at: -- [Amazon Cognito](#cognito) -- [SuperTokens](#supertokens) +## Cognito +Amazon Cognito is a cloud-based authentication service designed to integrate seamlessly with AWS services. -## Amazon Cognito +### Key Features +- User sign-up, sign-in, and access control +- Social and enterprise identity federation +- Secure access to AWS resources +- Advanced security features like adaptive authentication +- Integration with AWS ecosystem -![Conigto logo](./cognito_image.png) +### Pricing +Cognito offers a free tier with limited usage: +- **Free Tier**: 50,000 MAUs +- **Beyond Free Tier**: $0.0055 per MAU, plus additional charges for advanced security features and federation options -Cognito is a service that provides authentication, authorization, and user management for web and mobile apps. It is part of the AWS suite of products and can be used easily with any of their other offerings such as Lambda. +### Limitations +- Tied closely to the AWS ecosystem +- Limited customization compared to some alternatives -Cognito supports multiple compliance programs and can scale to millions of users. It has grown in popularity due to its accessible pricing. +### When to Use It +Use Cognito if you are heavily invested in the AWS ecosystem and need a scalable authentication solution with strong integration with AWS services. -### Advantages of using Cognito +## What to Look for in an Auth0 Alternative? -#### Pricing: -- One reason why so many people use Cognito is its price. It offers its basic authentication flow for free for the first **50000 MAUs** and it is $0.0055 per MAU after that. -#### Integration with other AWS services: -- Cognito’s tight integration with other AWS services such as API Gateway, AppSync, and ALB removes a whole layer of custom code you’d have to write if you use AWS's services. +When choosing an alternative to Auth0, consider the following factors: -### Disadvantages of using Cognito +### Factor 1: Integration and Ecosystem Compatibility +Ensure the solution integrates well with your existing tech stack and supports the identity providers and protocols you need. -#### Developer Experience: -- Cognito's documentation can vary in quality with some features not being documented at all. This can make working with the product very confusing and frustrating. -- Cognito is also not just a user management system but a single service with 3 distinct features. These are User Pools, Identity Pools, and Sync. This can be very confusing for newcomers. -- There have also been complaints about Cognito being slow to respond to bugs and feedback. For example [this issue](https://github.com/aws-amplify/amplify-js/issues/987) was breaking the flow for many users and was open for 4 years before it was resolved with the help of a community member. +### Factor 2: Customizability and Control +Evaluate the level of customization and control you require over the authentication process and user data. -#### Features: -- Cognito's core feature set is limited and it relies on other services in AWS’s stack to make up for this gap. This results in the user having to deal with AWS services when they require more advanced features. -#### UI Customization: -- Cognito’s built-in UI offers basic branding and colour customization through their dashboard. If you need a more custom design you will need to create your own UI. -#### Migration: -- Cognito does not allow you to export user password hashes. This can make migration to another database or service much harder. +### Factor 3: Pricing and Scalability +Consider your budget and the solution's ability to scale with your user base and feature requirements. -## AWS Cognito Pricing -Cognito’s free tier offers up to **50,000 MAUs** for free. Included are the Identity pool features which cover access control and RBAC. +## Conclusion -#### Free: -- User pools free for up to **50000 MAUs** -- **50 MAUs** for SAML / OIDC -- identity pools (Access control, RBAC, etc) - -#### Paid Features: -Cognito offers pricing tiers for additional MAUs and users with SAML/OIDC connections. They also offer advanced security features like compromised credential protection, risk-based adaptive authentication, and monitoring. -- Pricing tiers for additional MAUs: -![Cognito pricing tiers](./cognito_pricing_tiers.png) -- Additional SAML/OIDC users: - - **$0.015** per MAU after the first **50** in the free tier -- Pricing tiers for advanced security features : -![Cognito security pricing](./cognito_security_pricing.png) - -- SMS charges for multi-factor: - - Inbound charges: - ![sms inbound charge](./cognito_sms_pricing_inbound.png) - - Outbound charges: - ![sms outbound charge](./cognito_sms_pricing_outbound.png) - -### So is Cognito the way to go? -Cognito's free tier and integration with other AWS services position it as a great auth provider, but it does not provide the best developer experience. Users have complained about the documentation being confusing at times, making it hard to integrate with. - -## SuperTokens -![supertokens logo](./supertokens_logo.png) - -SuperTokens is an open-source authentication solution that provides a managed service for hassle-free auth and an on-prem solution so developers can manage their data. - -Starting as a session management solution in 2019, SuperTokens has evolved into a complete auth solution providing email-password, social and passwordless login with extensive customization options to curate the login experience to your needs. - -SuperTokens differentiates itself from its competitors with its flexibility. If you don't want to deal with handling user data you can use the managed service or, you can self-host the solution for free and control 100% of the data with your database. There are also no restrictions on completely customising the auth flow with their **override** feature. - - -### Advantages of using SuperTokens: -#### Completely Open Source: -- All of SuperTokens SDKs including the core service are open source. This allows developers to poke around the code for vulnerabilities and contribute to features. -#### Simple Setup: -- SuperTokens modular architecture makes the setup simple. It allows the developer to pick and choose what functionality they want and only see documentation relevant to their use case. -- Pre-built Auth UI that can be embedded in your website natively -- Support over [Discord](https://supertokens.com/discord). -#### Flexibility: -- As mentioned previously Supertokens has a managed service with reasonable pricing as well as a completely free self-hosted version. -- SuperTokens provides an override feature that enables you to fully customise authentication flows on both your frontend and backend. SuperTokens also provides pre-built UI components that can be rendered directly on your frontend - -### Disadvantages of using SuperTokens: -#### Enterprise features: -- At the time of writing this post SuperTokens doesn't offer some enterprise features like SCIM provisioning, admin and organization support. - -#### Tech Stack Support -- As of writing this article supertokens supports `Nodejs`, `Golang` and `Python` on the backend with `Reactjs(All Features)`, `VanillaJS(only session management)` and `React Native(only session management)` on the frontend. They currently do not support many popular languages like `Java` and `Php` and they do not have pre-built UI for popular frontend frameworks like `Angular` and `Vue`. - -## SuperTokens Pricing: -At the time of writing this article, the SuperTokens core feature set is completely free and they offer paid add-ons. If you decide to use the self-hosted version you can download the core and use it for free for an unlimited amount of users. - -![supertokens pricing](./supertokens_pricing.png) - -- #### Self-Hosted: - - Free forever for unlimited users. - -- #### Managed Service: - - Free for the first **5000 MAUs** . - - 2 cents / MAU post the first **5000 MAUs**. - - #### Add-ons - - Multi-tenancy - - Account Linking - - 2FA - -### So is SuperTokens the way to go? -SuperToken's feature set and pricing make it a great choice for startups and mid-level businesses, but it may not be the best fit for large organisations that require enterprise features. - -## Conclusion -So what authentication provider do you go with? -Well in the end it depends on your use case. - -- If your costs can scale with Auth0’s pricing and you don't need to customise their flows too much, then Auth0 is the way to go. -- AWS Cognito’s generous free tier and tight integration with other AWS services make it a great option if you can deal with sub-par documentation and support. -- If you are a startup or mid-level organisation looking for an open-source solution that can grow with your organisation, with extensive customization options and the ability to self-host or use a managed service, SuperTokens is the clear choice. - -
- -| | SuperTokens | Auth0 | AWS Cognito | -|:---:|:---:|:---:|:---:| -| Pricing | $$ / Free | $$$$ | $$$ | -| User Satisfaction | High | Medium | Low | -| UI and backend customisability | High | Medium | Low | -| Size of the company offering services | Startup | Enterprise | Enterprise | -| Company provided support for free tiers | High | Low | Low | -| Self Hostable | Yes | Yes | No | -| Open Source | Yes | No | No | -| Managed Service | Yes | Yes | Yes | -| Supported Cloud Providers | All | All | AWS | -| Compliance (SOC2, GDPR... | In Progress (not required for self hosted) | Yes | Yes | Self hosted - so not required -| User management dashboard | No | Yes | Yes | -| Passwordless login (email + phone no) | Yes | Yes | Yes | -| Social and Email Password login | Yes | Yes | Yes | -| Custom Open ID connector | Yes | Yes (Enterprise Tier) | Yes | -| SAML Login | Yes | Yes (Essential Tier) | Yes | -| Being an OAuth 2.0 provider | No | Yes | Yes | -| External Database | No | Yes (Essential Tier) | No | -| SLA gaurantees | Yes | Yes | Yes | -| Single sign on | Partial | Yes | Yes | -| 2FA | Partial | Yes | Yes | Yes | -| External Database | No | Yes (Essential Tier) | No | -| Roles and permissions | Yes | Yes | Yes | -| Web3 login | No | Yes | No | -| Machine to machine | Partial (only using JWT) | Yes | Yes | -| Multi tenancy | Partial | Yes | Yes | -| Cookie based session management (Out of the box) | Yes | No | No | -| Customise Emails and SMS | Yes | Yes | Yes | - -
- -Find the full comparsion chart on our [pricing page](https://supertokens.com/pricing) \ No newline at end of file +Choosing the right authentication solution depends on your specific needs, including integration requirements, control over authentication processes, and budget constraints. SuperTokens, Okta, Keycloak, and Cognito each offer unique strengths, so evaluate them based on your priorities to find the best fit for your organization. From ae8603f426c66778f1133e4134ec2efc8470c227 Mon Sep 17 00:00:00 2001 From: Joel Coutinho Date: Tue, 30 Jul 2024 22:10:26 +0530 Subject: [PATCH 2/2] updates auth0 comparison blog --- .../index.md | 46 +++++++++++++++++- .../keycloak-logo.png | Bin 0 -> 14149 bytes .../okta_logo.png | Bin 0 -> 6052 bytes 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/keycloak-logo.png create mode 100644 content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/okta_logo.png diff --git a/content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/index.md b/content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/index.md index 892c662f..b326b8b8 100644 --- a/content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/index.md +++ b/content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/index.md @@ -20,9 +20,12 @@ When it comes to choosing an authentication provider, businesses have several op ## SuperTokens +![SuperTokens Logo](./supertokens_logo.png) + SuperTokens is an open-source authentication solution designed for developers who want flexibility and control over their authentication flow. ### Key Features + - Open-source and self-hosted - Easy integration with frontend and backend frameworks - Support for various authentication methods including email/password, social login, and passwordless @@ -30,20 +33,24 @@ SuperTokens is an open-source authentication solution designed for developers wh - Advanced security features like anti-CSRF and token theft detection ### Pricing + SuperTokens offers a free open-source version. For managed services, pricing starts at $25 per month for the Pro plan, which includes features like managed hosting, priority support, and custom domain support. Enterprise pricing is available on request and includes additional features such as SLA, dedicated support, and custom SLAs. ### Limitations -- Requires self-hosting and management for the open-source version + +- Support for a limited number of backend languages and frameworks. - Limited integrations compared to some commercial solutions ### When to Use It Use SuperTokens if you need a flexible, open-source solution with strong session management and advanced security features, and are comfortable managing your own infrastructure. ## Okta +![Okta logo](./okta_logo.png) Okta is a comprehensive identity management solution designed for large enterprises needing advanced features and integrations. ### Key Features + - Robust single sign-on (SSO) capabilities - Multi-factor authentication (MFA) - Lifecycle management for users @@ -64,6 +71,8 @@ Use Okta if you are a large enterprise requiring extensive integrations, robust ## Keycloak +![Keycloak](./keycloak-logo.png) + Keycloak is an open-source identity and access management solution aimed at developers who need customizability and control. ### Key Features @@ -85,6 +94,8 @@ Use Keycloak if you need a customizable, open-source solution with comprehensive ## Cognito +![Cognito](./cognito_image.png) + Amazon Cognito is a cloud-based authentication service designed to integrate seamlessly with AWS services. ### Key Features @@ -106,6 +117,39 @@ Cognito offers a free tier with limited usage: ### When to Use It Use Cognito if you are heavily invested in the AWS ecosystem and need a scalable authentication solution with strong integration with AWS services. + +### Overall comparison of authentication providers + +| Feature | SuperTokens | Auth0 | AWS Cognito | Keycloak | Firebase | +|-----------------------------------------------------|---------------|---------------|-------------|---------------|---------------| +| Pricing | $$ / Free | $$$$$$ | Free | $$ | $$ | +| User Satisfaction | High | Medium | Low | Low | High | +| Ease of UI and backend customizability | Easy | Medium | High | High | High | +| Size of the company offering services | Startup | Enterprise | Enterprise | Enterprise | Enterprise | +| Company provided support for free tiers | High | Low | Low | None | Medium | +| Self hostable | Yes | Yes | No | Yes | No | +| Open Source | Yes | No | No | Yes | No | +| Managed Service | Yes | Yes | Yes | No | Yes | +| Supported Cloud Providers | All | All | AWS | All | GCP | +| Compliance (SOC2, GDPR) | Yes | Yes | Yes | Self hosted | Yes | +| User management dashboard | Yes | Yes | Yes | Yes | Yes | +| Passwordless login (email + phone no) | Yes | Yes | Partial | Yes | Yes | +| Social and Email Password login | Yes | Yes | Yes | Yes | Yes | +| Custom Open ID connector | Yes | Yes | Yes | Yes | Yes | +| SAML Login | Yes | Yes | Yes | Yes | Yes | +| Unified login | Partial | Yes | Yes | Yes | Yes | +| External Database | Yes | Yes | No | Yes | Yes | +| SLA guarantees | Yes | Yes | Yes | No | Not Known | +| 2FA / MFA | Yes | Yes | Yes | Yes | Partial | +| Roles and permissions | Yes | Yes | Yes | Yes | Yes | +| Web3 login | No | Yes | No | No | No | +| Machine to machine | Partial | Yes | Yes | Yes | Partial | +| Multi tenancy | Yes | Yes | Limit to 4 | Yes | Yes | +| Cookie based session management (Out of the box) | Yes | No | No | No | No | +| Customize Emails and SMS | Yes | Yes | Partial | Partial | Partial | + +For more details, you can visit the [SuperTokens Pricing page](https://supertokens.com/pricing#comparison-chart). + ## What to Look for in an Auth0 Alternative? When choosing an alternative to Auth0, consider the following factors: diff --git a/content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/keycloak-logo.png b/content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/keycloak-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..12ce698d9b18a3102377511c10652d397190ea27 GIT binary patch literal 14149 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 A4*&oF literal 0 HcmV?d00001 diff --git a/content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/okta_logo.png b/content/auth0-alternatives-auth0-vs-okta-vs-cognito-vs-supertokens/okta_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7287fa884a89c116dc18a25282bd6a17dcd30a34 GIT binary patch literal 6052 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 et}h