@orsetra/shared-auth
v1.0.11
Published
Shared authentication utilities for Orsetra platform using Zitadel
Maintainers
Readme
@orsetra/shared-auth
Shared authentication utilities for Orsetra platform using Zitadel OIDC.
Installation
npm install @orsetra/shared-auth
# or
pnpm add @orsetra/shared-authPeer Dependencies
npm install react react-dom next oidc-client-ts joseUsage
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-idLicense
MIT