# Add User Authentication
URL: /guides/add-authentication

Learn how to enable per-user authentication so users of your application only access Tambo threads and messages that belong to them.

Tambo supports authentication through any OAuth 2.0 provider. Choose your authentication provider below to get started with a step-by-step integration guide.

## Available Providers

<Cards>
  <Card href="/guides/add-authentication/nextauth" title="Auth.js">
    Learn how to integrate Tambo with Auth.js using Google OAuth as an example.
  </Card>

  <Card href="/guides/add-authentication/auth0" title="Auth0">
    Step-by-step guide for integrating Tambo with Auth0 authentication.
  </Card>

  <Card href="/guides/add-authentication/clerk" title="Clerk">
    Complete example of using Tambo with Clerk's authentication system.
  </Card>

  <Card href="/guides/add-authentication/supabase" title="Supabase">
    Integration guide for Supabase Auth with Tambo in Next.js applications.
  </Card>

  <Card href="/guides/add-authentication/neon" title="Neon">
    How to use Tambo with Auth.js and Neon PostgreSQL database integration.
  </Card>

  <Card href="/guides/add-authentication/workos" title="WorkOS">
    Enterprise-grade authentication with WorkOS and Tambo integration.
  </Card>

  <Card href="/guides/add-authentication/better-auth" title="Better Auth">
    Modern authentication toolkit with built-in support for multiple providers
    and plugins.
  </Card>
</Cards>

## Before You Begin

All authentication integrations follow the same pattern:

1. **Set up your auth provider** - Configure your OAuth application with the provider
2. **Get the user token** - Retrieve the JWT token from your auth provider
3. **Pass token to Tambo** - Provide the token to `TamboProvider` via the `userToken` prop
4. **Configure verification** - Set up JWT verification in your Tambo project settings

For a deeper understanding of how Tambo authentication works, see the [User Authentication concept](/concepts/user-authentication).

## Common Integration Pattern

All provider guides follow this basic structure:

```tsx
"use client";

import { TamboProvider } from "@tambo-ai/react";

export default function Layout({ children }: { children: React.ReactNode }) {
  const userToken = useUserToken(); // Provider-specific hook
  return <TamboProvider userToken={userToken}>{children}</TamboProvider>;
}
```

The main difference between providers is how you retrieve the `userToken`. Each guide shows both server-side and client-side approaches.
