@orsetra/shared-auth

v1.0.11

Published

Shared authentication utilities for Orsetra platform using Zitadel

Readme

@orsetra/shared-auth

Shared authentication utilities for Orsetra platform using Zitadel OIDC.

Installation

npm install @orsetra/shared-auth
# or
pnpm add @orsetra/shared-auth

Peer Dependencies

npm install react react-dom next oidc-client-ts jose

Usage

1. Configuration Zitadel

import { createAuthConfig } from '@orsetra/shared-auth/config'

const authConfig = createAuthConfig({
  authority: process.env.NEXT_PUBLIC_ZITADEL_AUTHORITY,
  client_id: process.env.NEXT_PUBLIC_ZITADEL_CLIENT_ID,
  project_resource_id: process.env.NEXT_PUBLIC_ZITADEL_PROJECT_ID,
})

2. Provider dans l'App Principale

import { ZitadelProvider } from '@orsetra/shared-auth'

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        <ZitadelProvider config={authConfig}>
          {children}
        </ZitadelProvider>
      </body>
    </html>
  )
}

3. Protected Routes

import { ProtectedRoute } from '@orsetra/shared-auth'

export default function DashboardPage() {
  return (
    <ProtectedRoute>
      <Dashboard />
    </ProtectedRoute>
  )
}

4. Utiliser le Service d'Auth

import { ZitadelAuthService } from '@orsetra/shared-auth/services'

const authService = new ZitadelAuthService(authConfig)

// Login
await authService.login()

// Logout
await authService.logout()

// Get user
const user = await authService.getUser()

// Get access token
const token = await authService.getAccessToken()

Architecture Micro-Frontend

App Main (Authentification Centralisée)

L'app main gère le flow OAuth :

// apps/main/app/layout.tsx
import { ZitadelProvider } from '@orsetra/shared-auth'

export default function RootLayout({ children }) {
  return (
    <ZitadelProvider config={authConfig}>
      {children}
    </ZitadelProvider>
  )
}

Micro-Apps (Validation de Token)

Les micro-apps valident le token reçu :

// apps/assets/middleware.ts
import { verifyToken } from '@orsetra/shared-auth/utils'

export async function middleware(request: NextRequest) {
  const token = request.headers.get('x-auth-token')
  
  if (!token) {
    return NextResponse.redirect('/login')
  }
  
  const isValid = await verifyToken(token)
  
  if (!isValid) {
    return NextResponse.redirect('/login')
  }
  
  return NextResponse.next()
}

Environment Variables

NEXT_PUBLIC_ZITADEL_AUTHORITY=https://your-instance.zitadel.cloud
NEXT_PUBLIC_ZITADEL_CLIENT_ID=your-client-id
NEXT_PUBLIC_ZITADEL_PROJECT_ID=your-project-id

License

MIT

Repository

GitHub