Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: OpenID Connect #211

Merged
merged 6 commits into from
Nov 2, 2024
Merged

Feat: OpenID Connect #211

merged 6 commits into from
Nov 2, 2024

Conversation

c-jar
Copy link
Contributor

@c-jar c-jar commented Nov 2, 2024

Bonjour,

Tout d'abord merci pour cette merveilleuse application !
Cette PR est plus conséquente que j'aurais cru, je comprendrais qu'elle ne soit pas accepter en l'état.

Objectif de la PR : Supporter le protocole OpenID Connect afin de permettre à Deming de s'intégrer à une solution WebSSO (Single Sign-On) tel que Keycloak. Cela inclut l'authentification, la création et la mise à jour de l'utilisateur.

image

Cette PR ajoute 2 nouvelles dépendances :

"laravel/socialite": "^5.16",
"socialiteproviders/keycloak": "^5.3"

La première est un composant Laravel permettant d'ajouter le support à OAuth2 et OpenID Connect, la seconde est une extension permettant l'intégration de Keycloak.

Les nouveaux fichiers :

  • app/Http/Controllers/SocialiteController.php : contrôleur permettant l’authentification/création/mise à jour de l'utilisateur par un SSO
  • app/Providers/Socialite/GenericSocialiteProvider.php : un fournisseur comme Keycloak, utilie si vous utilisez un SSO qui n'a pas encore de fournisseurs produit par la communauté Laravel

Les fichiers modifiés :

  • resources/views/auth/login.blade.php : pour ajouter les boutons redirigeant vers le SSO seulement si activé
  • config/services.php : ajout des configurations du nouveau contrôleur et des 2 fournisseurs (Keycloak et Generic)
  • routes/web.php ajout de 2 routes
    • /auth.redirect/{driver} qui redirige l'utilisateur vers le SSO
    • /auth/callback/{driver} vers laquelle l'utilisateur est redirigé par le SSO une fois authentifié
  • app/Providers/AppServiceProvider.php pour enregistrer les deux fournisseurs (Keycloak et Generic)

Configuration

Pour activer l'intégration d'un WebSSO, par exemple Keycloak, il suffit d'ajouter dans le fichier .env:

# List of socialite providers separated by a space. Possible value : keycloak, oidc
SOCIALITE_PROVIDERS="keycloak"

Ainsi que la configuration dédié à Keycloak que l'ont retrouve sur le site https://socialiteproviders.com, par exemple :

KEYCLOAK_CLIENT_ID=deming
KEYCLOAK_CLIENT_SECRET=secret
KEYCLOAK_REDIRECT_URI=${APP_URL}auth/callback/keycloak
KEYCLOAK_BASE_URL=https://keycloak.local
KEYCLOAK_REALM=main

Enfin vous pouvez :

  • Modifier le nom de WebSSO affiché sur la page de Login :
KEYCLAOK_DISPLAY_NAME="SSO d'entreprise"
  • Activer/Désactiver la création et/ou la mise à jour des utilisateurs
KEYCLOAK_ALLOW_CREATE_USER=false
KEYCLOAK_ALLOW_UPDATE_USER=false

Pour la création et la mise à jour il y a 3 paramètres supplémentaires :

# Rôle par défaut si le SSO n'en fournit pas 
KEYCLOAK_DEFAULT_ROLE="auditee"
# Le Claim dans lequel sera renvoyé le rôle
KEYCLOAK_ROLE_CLAIM="resource_access.deming.roles.0"
# Le scope à ajouter pour que le SSO retourne le rôle
KEYCLOAK_ADDITIONAL_SCOPES="roles"

Les même paramètres avec OIDC_ à la place de KEYCLOK_ existe pour configurer le fournisseur Generic.

Je reste disponible pour échanger sur cette PR :)

@dbarzin dbarzin self-assigned this Nov 2, 2024
@dbarzin
Copy link
Owner

dbarzin commented Nov 2, 2024

Merci pour la contribution !

@dbarzin dbarzin merged commit ad0e85a into dbarzin:main Nov 2, 2024
@dbarzin
Copy link
Owner

dbarzin commented Nov 2, 2024

Pourrais-tu ajouter quelques lignes de documentation comme cela a été fait pour Mercator : https://github.com/dbarzin/mercator/blob/master/INSTALL.md#keycloak-configuration-optional

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants