1.4.0 • Published 6 months ago

@innobdx/nuxt-oidc-auth v1.4.0

Weekly downloads
-
License
MIT
Repository
gitlab
Last release
6 months ago

Nuxt OIDC Auth

npm version npm downloads License Nuxt

Module d'authentification Nuxt 3 pour l'implémentation d'OpenID Connect (OIDC).

Fonctionnalités

  • 🔒 Intégration fluide de l'authentification OIDC dans les applications Nuxt 3
  • 🔄 Support du flux d'authentification code
  • 🔄 Renouvellement automatique des tokens
  • 🛡️ Middleware global pour protéger les routes
  • 🌐 Compatible avec différents fournisseurs OIDC (Keycloak, Auth0, etc.)

Installation

npm install @innobdx/nuxt-oidc-auth

Configuration

Ajoutez le module à votre application Nuxt dans votre fichier nuxt.config.ts :

export default defineNuxtConfig({
  modules: ['@innobdx/nuxt-oidc-auth'],
  nuxtOidcAuth: {
    authority: 'https://votre-serveur-auth.com/realm',
    client_id: 'votre-client-id',
    // Autres options...
  }
})

Options disponibles

NomDescriptionObligatoireValeur par défaut
authorityURL du fournisseur d'identité OIDCOui-
client_idIdentifiant du client OIDCOui-
client_secretSecret du client OIDCNon-
redirect_uriURI de redirection après authentificationNon${window.location.origin}/auth
silent_redirect_uriURI de redirection pour le renouvellement silencieuxNon${window.location.origin}/auth/silent-refresh
post_logout_redirect_uriURI de redirection après déconnexionNon${window.location.origin}
response_typeType de réponse OIDCNoncode
scopeScopes OIDC demandésNonopenid profile email offline_access
silentRequestTimeoutInSecondsDélai d'expiration pour les requêtes silencieuses en secondesNon10

Utilisation

Composable useAuth

Utilisez le composable useAuth pour accéder à toutes les fonctionnalités d'authentification :

<script setup>
const { user, loggedIn, accessToken, logout } = useAuth()
</script>

<template>
  <div v-if="loggedIn">
    <p>Bienvenue, {{ user.name }} !</p>
    <button @click="logout">Se déconnecter</button>
  </div>
  <div v-else>
    <p>Vous n'êtes pas connecté.</p>
  </div>
</template>

API du composable

NomTypeDescription
userRef<any>Profil de l'utilisateur
accessTokenRef<string>Token d'accès JWT
loggedInRef<boolean>État de connexion
tokenIsExpiredRef<boolean>Indique si le token est expiré
signInRedirect()FunctionRedirige vers la page de login
signInCallback()FunctionTraite le callback d'authentification
renewToken()FunctionForce le renouvellement du token
logout()FunctionDéconnecte l'utilisateur

Protection des routes

Un middleware global est automatiquement enregistré pour protéger toutes les routes. Si l'utilisateur n'est pas connecté, il sera redirigé vers la page d'authentification.

Les routes d'authentification suivantes sont automatiquement exclues de la protection :

  • /auth - Page de callback d'authentification
  • /auth/silent-refresh - Page de renouvellement silencieux

Configuration avec Keycloak

1. Créer un client dans Keycloak

  • Créez un nouveau client avec le type "OpenID Connect"
  • Définissez "Access Type" sur "public"
  • Ajoutez les redirections valides :
    • http://localhost:3000/auth
    • http://localhost:3000/auth/silent-refresh
    • http://localhost:3000
  • Activez "Web Origins" avec la valeur http://localhost:3000

Exemple complet

// nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@innobdx/nuxt-oidc-auth'],
  nuxtOidcAuth: {
    authority: 'https://keycloak-server.example.com/realms/your-realm',
    client_id: 'your-client-id',
    silentRequestTimeoutInSeconds: 30
  },
  ssr: false  // Le module fonctionne uniquement en mode SPA (client-side)
})
<!-- pages/profile.vue -->
<script setup lang="ts">
const { user, accessToken, logout } = useAuth()
</script>

<template>
  <div>
    <h1>Profil Utilisateur</h1>
    <div v-if="user">
      <p>Nom: {{ user.name }}</p>
      <p>Email: {{ user.email }}</p>
      <p>Identifiant: {{ user.sub }}</p>
      <button @click="logout">Se déconnecter</button>
    </div>
  </div>
</template>

Contribution

Licence

MIT

1.4.0

6 months ago

1.3.0

6 months ago

1.2.0

6 months ago