By NHI Mgmt Group Editorial TeamPublished 2026-04-28Domain: Best PracticesSource: Cerbos

TL;DR: Supabase Auth works well for fast sign-in on a Supabase and Postgres stack, but its authorization model stays manual in RLS and becomes harder to govern as roles, tenancy, and cross-service permissions expand, according to Cerbos. The practical issue is not login, but the growing cost of maintaining policy logic in one database layer.


At a glance

What this is: This is a comparison of Supabase Auth and alternative identity options, with the central finding that authorization is the real constraint once applications outgrow simple Postgres-centric access rules.

Why it matters: It matters because IAM teams need to separate authentication from authorization decisions before manual policy logic turns into a governance bottleneck across NHI, autonomous, and human-access patterns.

👉 Read Cerbos' comparison of Supabase Auth alternatives and authorization options


Context

Supabase Auth is a convenient authentication layer when an application already centers on Supabase and Postgres, but that convenience comes from tightly coupling sign-in, JWT handling, and database policy enforcement. The primary keyword here is Supabase Auth alternatives, because the article is really about where that coupling stops scaling.

The governance gap appears when permission logic has to stretch beyond a single database model. At that point, teams are not only comparing login products, they are deciding whether authorization stays embedded in RLS or moves into a dedicated control layer that is easier to review, test, and change.


Key questions

Q: How should security teams decide whether to replace Supabase Auth or keep it and add authorization separately?

A: Teams should replace Supabase Auth only when the authentication layer itself is the constraint, such as when they need broader federation, protocol support, or a different identity operating model. If sign-in is working and the pain is policy sprawl, keep Supabase for authentication and move authorization into a separate, governed decision layer so access rules are easier to review and change.

Q: Why does RLS-based authorization become harder to govern as applications grow?

A: RLS becomes harder to govern because the access model is tied to one database schema, which pushes roles, relationships, and tenancy rules into manual policy construction. That makes review and change management slower as the system expands across services. The issue is not that RLS is weak, but that it scales poorly as the only policy surface.

Q: What do teams get wrong when comparing Supabase Auth with identity platforms like Keycloak or ZITADEL?

A: Teams often compare them as if they solve the same problem, when they actually sit at different layers. Supabase Auth is mainly about sign-in, while identity platforms broaden federation and identity infrastructure. If the actual gap is fine-grained authorization, neither category should be treated as a substitute for a policy decision layer.

Q: Can an organisation keep Supabase Auth and still improve access governance?

A: Yes. The cleanest path is to preserve Supabase for authentication and externalise authorization into a dedicated engine when policy complexity starts growing. That lets the team keep the current login experience while removing manual access logic from database policies and application code, which reduces long-term governance friction.


Technical breakdown

Supabase Auth, JWT claims, and Postgres RLS coupling

Supabase Auth issues tokens that carry identity claims into PostgreSQL Row-Level Security, where application access is enforced through database policies. That design reduces the need for a separate identity provider and can work cleanly when the app is narrow and database centric. The trade-off is architectural dependence: access logic lives in one datastore model, so policy changes, tenancy rules, and cross-service decisions become harder to standardize outside Postgres.

Practical implication: keep the coupling only where database-local policy is sufficient, and avoid letting RLS become the only place your organisation knows how to express access rules.

Why manual authorization becomes the scaling problem

Supabase Auth handles authentication, not a full built-in authorization model. That means roles, relationships, and permission checks are assembled manually, which is workable early on but creates review overhead as applications grow. Once teams need broader tenancy, clearer separation of duties, or policy consistency across services, the manual layer becomes the thing that slows governance more than the login stack does.

Practical implication: assess whether your access model is being maintained as application code and database policy sprawl rather than as a governed authorization service.

Why identity platforms and authorization engines solve different problems

Broader identity platforms such as ZITADEL, Authentik, and Keycloak expand identity infrastructure, federation, and protocol coverage, but they still do not automatically solve fine-grained authorization. A dedicated authorization layer such as Cerbos changes the control plane by externalizing policy from the application and database. That separation matters because it lets authentication, identity lifecycle, and access decisioning evolve independently instead of being locked to one stack.

Practical implication: decide whether your gap is sign-in, identity infrastructure, or policy decisioning before replacing a working authentication layer.


Read our 52 NHI Breaches Analysis report for a comprehensive view of breaches impacting Non-Human Identities including AI Agents.


NHI Mgmt Group analysis

Supabase Auth alternatives are really a governance decision about where authorization should live. The article makes clear that authentication is not the problem as much as the manual policy layer around RLS. When access logic has to be built table by table, teams end up governing permissions through database design choices instead of through a distinct identity control model. The practitioner conclusion is to treat authorization location as an architecture decision, not a feature comparison.

Database-bound access control becomes brittle once the permission model expands beyond one application boundary. RLS can be efficient for a small product, but it becomes harder to reason about when tenancy, service-to-service access, and application-specific roles all need to line up. This is where identity governance starts to fragment across code, schema, and operational practice. The practitioner conclusion is that policy portability matters as soon as the system stops being single-purpose.

Fine-grained authorization is the named concept this comparison surfaces. Supabase Auth handles identity proofing and token issuance, but fine-grained authorization is the work of deciding who can do what on which resource under which context. The article shows that this work is left manual inside Postgres, which is manageable until policy complexity starts outrunning review capacity. The practitioner conclusion is to separate the decision layer from the login layer before governance debt accumulates.

The real choice is between replacing authentication and preserving it while re-platforming authorization. Many teams approach a Supabase alternative as an identity swap, but the article correctly splits the problem into sign-in and permission control. That split is useful because it prevents unnecessary churn in the authentication stack when the governance pain sits elsewhere. The practitioner conclusion is to move only the layer that is actually failing.

Identity platforms and authorization engines should not be evaluated as substitutes. ZITADEL, Authentik, and Keycloak can broaden identity infrastructure, while an authorization engine addresses the rules that sit after authentication. Conflating those layers is how programmes end up with more sign-in capability but the same policy maintenance burden. The practitioner conclusion is to evaluate whether the programme needs identity scope, policy scope, or both.

From our research:

  • 97% of NHIs carry excessive privileges, increasing unauthorised access and broadening the attack surface, according to the Ultimate Guide to NHIs.
  • Only 5.7% of organisations have full visibility into their service accounts, which means entitlement review is still operating without complete inventory discipline.
  • NHI Lifecycle Management Guide explains how provisioning, rotation, and offboarding reduce policy drift before it becomes an access-control problem.

What this signals

Fine-grained authorization will keep moving out of application code and database policy as programmes mature. Teams that leave access logic embedded in RLS eventually discover that the hard part is not authentication, but maintaining a policy model that survives product growth and organisational change. The programme-level signal is to plan for a separate decision layer before policy debt becomes a control gap.

The broader NHI lesson is that governance fails when identity and permissioning are forced into one mechanism. That is already true for service accounts and API keys, and it becomes equally visible in application authorization when the access model outgrows the original stack. For practitioners, the question is whether the current architecture can still express least privilege without manual exceptions.


For practitioners

  • Separate authentication from authorization in the target architecture Keep Supabase for sign-in if it is already working, but move permission evaluation into a distinct policy layer when access rules are growing beyond simple RLS. This makes policy changes easier to test, audit, and review across services.
  • Map where policy logic currently lives Inventory whether authorization is embedded in database policies, application code, or both, then identify the routes that depend on manual table relationships. Use that map to find where governance is already fragmented.
  • Re-evaluate tenancy and cross-service access before scaling Check whether your current model can represent multi-tenant access and service-level permissions without duplicating rules across schemas. If it cannot, the bottleneck is architecture, not authentication.
  • Compare identity platform needs against policy engine needs Assess whether the programme needs a broader identity provider, stronger federation, or a dedicated authorization engine. Do not replace a working login layer simply because access rules are hard to maintain elsewhere.

Key takeaways

  • Supabase Auth is a strong fit for simple Supabase and Postgres-based products, but its authorization model becomes harder to govern as policy complexity grows.
  • The article shows that the real architecture decision is not login versus no login, but whether authorization should remain manual inside RLS or move to a separate control layer.
  • Teams should treat identity platform selection, authentication scope, and authorization governance as separate design choices instead of one bundled decision.

Standards & Framework Alignment

This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.

OWASP Non-Human Identity Top 10 address the attack and risk surface, while NIST CSF 2.0 and NIST Zero Trust (SP 800-207) set the governance and control requirements practitioners need to meet.

FrameworkControl / ReferenceRelevance
OWASP Non-Human Identity Top 10NHI-03Manual policy sprawl raises entitlement and rotation risk for non-human access paths.
NIST CSF 2.0PR.AC-4Access permissions need governance when roles and tenancy expand beyond a single database.
NIST Zero Trust (SP 800-207)AC-4Zero Trust requires policy decisioning that is separate from the resource layer.

Document where non-human access decisions live and remove duplicated policy logic from application and database layers.


Key terms

  • Row-Level Security: Row-Level Security is a database access control method that filters which rows a user can see or modify based on policy rules. In practice, it can work well for simple applications, but it becomes a governance burden when it is used as the main place to express complex, cross-service authorization logic.
  • Fine-Grained Authorization: Fine-grained authorization is the practice of deciding access at the level of specific resources, actions, and context rather than broad roles alone. It separates permission decisions from authentication and is most useful when applications need nuanced rules across multiple services or tenant boundaries.
  • Authorization Engine: An authorization engine is a dedicated policy decision layer that evaluates whether a principal can perform an action on a resource under defined conditions. It reduces dependency on application code and database policies, which makes access rules easier to centralise, audit, and evolve over time.
  • Identity Provider: An identity provider authenticates users and issues identity assertions or tokens that applications can trust. It does not automatically solve authorization, which is why teams often need a second control layer when sign-in and permission logic start to diverge.

Deepen your knowledge

Supabase Auth alternatives and the point where authorization should move out of RLS are covered in our NHI Foundation Level course, the industry's only accredited NHI security programme. If you are separating sign-in from policy decisioning in a similar stack, it is worth exploring.

This post draws on content published by Cerbos: Supabase Auth alternatives and authorization trade-offs. Read the original.

NHIMG Editorial Note
Published by the NHIMG editorial team on 2026-04-28.
NHI Mgmt Group — the independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org