Comment configurer Keycloak dans un projet Angular
Keycloak est une solution de gestion des identités et des accès open-source, hautement extensible et offrant une sécurité robuste pour vos applications. L’intégration de Keycloak dans votre projet Angular peut être réalisée avec le package keycloak-angular. Ce guide vous guidera à travers le processus de configuration de Keycloak dans votre projet Angular en utilisant keycloak-angular.
Prérequis
Avant de commencer, assurez-vous d’avoir les éléments suivants :
- Node.js et npm installés sur votre machine de développement.
- Angular CLI installé.
- Accès à une instance de serveur Keycloak ou vous pouvez en configurer une localement à des fins de test.
Installation
Installez les packages keycloak-angular et keycloak-js via npm :
import { APP_INITIALIZER, NgModule } from '@angular/core'import { BrowserModule } from '@angular/platform-browser'import { KeycloakAngularModule, KeycloakService } from 'keycloak-angular'import { AppRoutingModule } from './app-routing.module'import { AppComponent } from './app.component'
function initializeKeycloak(keycloak: KeycloakService) { return () => keycloak.init({ config: { url: 'http://localhost:8080', // URL vers votre Keycloak instance realm: 'your-realm', // Votre Keycloak realm clientId: 'your-client-id', // Client ID de votre application configurée dans Keycloak }, initOptions: { onLoad: 'check-sso', silentCheckSsoRedirectUri: window.location.origin + '/assets/silent-check-sso.html', }, })}
@NgModule({ declarations: [AppComponent], imports: [AppRoutingModule, BrowserModule, KeycloakAngularModule], providers: [ { provide: APP_INITIALIZER, useFactory: initializeKeycloak, multi: true, deps: [KeycloakService], }, ], bootstrap: [AppComponent],})export class AppModule {}Créer un fichier HTML Silent Check-Sso :
Créez un fichier nommé silent-check-sso.html à l’intérieur du répertoire assets de votre projet Angular avec le contenu suivant :
<html> <body> <script> parent.postMessage(location.href, location.origin) </script> </body></html>Utilisation
AuthGuard
keycloak-angular fournit un AuthGuard générique, KeycloakAuthGuard, pour protéger les routes authentifiées de votre application. Vous pouvez étendre cette garde et implémenter votre propre logique en fonction des exigences de votre application.
import { Injectable } from '@angular/core'import { ActivatedRouteSnapshot, Router, RouterStateSnapshot,} from '@angular/router'import { KeycloakAuthGuard, KeycloakService } from 'keycloak-angular'
@Injectable({ providedIn: 'root',})export class AuthGuard extends KeycloakAuthGuard { constructor( protected readonly router: Router, protected readonly keycloak: KeycloakService, ) { super(router, keycloak) }
public async isAccessAllowed( route: ActivatedRouteSnapshot, state: RouterStateSnapshot, ) { // Your authentication logic here }}Intercepteur HttpClient
keycloak-angular fournit un intercepteur HttpClient pour ajouter l’en-tête Authorization à toutes les requêtes HttpClient. Vous pouvez configurer des exclusions et d’autres options selon vos besoins.
Événements Keycloak-js
Les événements de keycloak-js peuvent être accédés via le subject RxJS keycloakEvents$ fourni par keycloak-angular. Vous pouvez utiliser ces événements pour différentes fonctionnalités, telles que le rafraîchissement automatique des access tokens.
Pour plus de détails et de configurations avancées, consultez le Github officiel de Keycloak Angular et la documentation Keycloak.