Aller au contenu principal

Lucca

Ce guide vous explique comment configurer l'authentification unique (SSO) entre VaultysHub et Lucca en utilisant SAML 2.0 ou OpenID Connect.

Prérequis​

  • Compte Lucca avec module SSO activé
  • Accès administrateur à Lucca
  • Application configurée dans VaultysHub avec SAML2 ou OpenID Connect
  • Domaine email vérifié

Note : Le SSO nécessite l'activation du module SSO dans votre contrat Lucca.

Configuration avec OpenID Connect (Recommandé)​

Configuration dans VaultysHub​

1. Créer l'application​

  1. Connectez-vous à VaultysHub en tant qu'administrateur
  2. Allez dans Applications → Ajouter
  3. Créez une nouvelle application :
    • Nom : Lucca
    • URL : https://[votre-instance].ilucca.net
    • Description : Suite SIRH complète (Figgo, Pagga, Timmi, etc.)
    • Icône : Choisissez l'icône Lucca

2. Configurer OpenID Connect​

  1. Dans l'onglet Authentification
  2. Sélectionnez OpenID Connect
  3. Notez les informations :
    • Client ID : lucca-xxxxxx
    • Client Secret : secret-xxxxxx
    • App ID : [appid] (identifiant unique généré automatiquement)

3. URLs de redirection​

Ajoutez dans URLs de redirection autorisées :

https://[votre-instance].ilucca.net/identity/oidc/callback
https://[votre-instance].ilucca.net/auth/oidc/callback

Configuration dans Lucca​

1. Accéder aux paramètres SSO​

  1. Connectez-vous à Lucca en tant qu'administrateur
  2. Allez dans Configuration → Paramètres → Authentification
  3. Cliquez sur Single Sign-On (SSO)
  4. Sélectionnez OpenID Connect

2. Configuration du fournisseur d'identité​

Configurez les paramètres suivants :

  • Discovery URL : https://[votre-smartlink].link.vaultys.org/api/oidc/[appid]/.well-known/openid-configuration
  • Client ID : lucca-xxxxxx (depuis VaultysHub)
  • Client Secret : secret-xxxxxx (depuis VaultysHub)
  • Scopes : openid profile email

3. Mapping des attributs​

Attribut LuccaClaim OpenIDObligatoire
Emailemail✅
Prénomgiven_name✅
Nomfamily_name✅

VaultysHub ne transmet ni les groupes, ni le matricule, le service ou le manager : ces informations sont gérées directement dans Lucca.

Configuration avec SAML 2.0​

Configuration dans VaultysHub​

1. Configurer SAML2​

  1. Dans l'application Lucca
  2. Onglet Authentification → SAML2
  3. Configurez :
    • Entity ID : l'Entity ID du Service Provider fourni par Lucca (et non l'URL de VaultysHub)
    • ACS URL : https://[votre-instance].ilucca.net/identity/saml2/acs
    • Format NameID : emailAddress

2. Récupérer les métadonnées​

Notez les URLs :

  • Métadonnées IdP : https://[votre-smartlink].link.vaultys.org/api/saml2/metadata/[appid]
  • SSO URL : https://[votre-smartlink].link.vaultys.org/api/saml2/sso/[appid]
  • Entity ID : https://[votre-smartlink].link.vaultys.org/[appid]

La déconnexion unique (Single Logout) depuis VaultysHub n'est pas prise en charge.

Configuration dans Lucca​

  1. Dans Configuration → Authentification → SAML 2.0
  2. Importez les métadonnées ou configurez manuellement :
    • IdP Entity ID : https://[votre-smartlink].link.vaultys.org/[appid]
    • SSO URL : https://[votre-smartlink].link.vaultys.org/api/saml2/sso/[appid]
    • Certificat X.509 : Importez depuis VaultysHub

Configuration des modules Lucca​

VaultysHub ne transmet pas les groupes de l'utilisateur : les rôles et les accès aux modules sont attribués directement dans Lucca.

Figgo (Gestion des congés)​

{
"figgo_settings": {
"auto_provision": true,
"sync_managers": true,
"default_leave_policy": "standard"
}
}

Pagga (Gestion de paie)​

{
"pagga_settings": {
"restricted_access": true
}
}

Timmi (Gestion des temps)​

timmi_configuration:
projects:
default_access: "member"

time_tracking:
mandatory: true
validation_workflow: "manager"

Poplee Core RH​

{
"poplee_settings": {
"employee_sync": {
"source": "sso",
"update_on_login": true
}
}
}

Synchronisation des données​

API Lucca avec SSO​

const axios = require('axios');

class LuccaAPIClient {
constructor(apiKey, domain) {
this.apiKey = apiKey;
this.baseUrl = `https://${domain}.ilucca.net/api/v3`;
}

async syncUserFromSSO(ssoUserData) {
// Rechercher l'utilisateur par email
const user = await this.getUserByEmail(ssoUserData.email);

if (!user) {
// Créer l'utilisateur
return await this.createUser({
mail: ssoUserData.email,
firstName: ssoUserData.given_name,
lastName: ssoUserData.family_name,
authenticationMode: 'sso'
});
} else {
// Mettre à jour l'utilisateur
return await this.updateUser(user.id, {
firstName: ssoUserData.given_name,
lastName: ssoUserData.family_name
});
}
}

async getUserByEmail(email) {
const response = await axios.get(`${this.baseUrl}/users`, {
headers: { 'Authorization': `lucca application=${this.apiKey}` },
params: { mail: email }
});
return response.data.items[0];
}
}

Webhooks Lucca​

// Endpoint pour recevoir les webhooks Lucca
app.post('/webhook/lucca', async (req, res) => {
const { event, data } = req.body;

switch(event) {
case 'user.created':
// Synchroniser avec VaultysHub si nécessaire
await syncNewUserToSmartLink(data);
break;

case 'leave.approved':
// Notifier via VaultysHub
await sendNotification(data.userId, 'Votre demande de congé a été approuvée');
break;

case 'timesheet.submitted':
// Déclencher workflow de validation
await triggerValidationWorkflow(data);
break;
}

res.status(200).json({ success: true });
});

Test de la configuration​

1. Test de connexion​

  1. Déconnectez-vous de Lucca
  2. Allez sur https://[votre-instance].ilucca.net
  3. Cliquez sur Se connecter avec SSO
  4. Entrez votre email professionnel
  5. Authentifiez-vous via VaultysHub
  6. Vérifiez l'accès aux différents modules Lucca

2. Test des permissions​

# Test API avec authentification SSO
curl -X GET "https://[votre-instance].ilucca.net/api/v3/users/me" \
-H "Authorization: lucca application=YOUR_API_KEY"

3. Test mobile​

Les applications Lucca Mobile supportent le SSO :

  • Figgo Mobile (iOS/Android)
  • Timmi Mobile
  • Lucca Mobile (app unifiée)

Dépannage​

Erreur "Authentification SSO échouée"​

Problème : L'authentification SSO ne fonctionne pas

Solution :

  1. Vérifiez que l'Entity ID est https://[votre-smartlink].link.vaultys.org/[appid] pour SAML
  2. Pour OIDC, vérifiez la Discovery URL
  3. Assurez-vous que l'email existe dans Lucca
  4. Consultez les logs : Configuration → Logs d'authentification

Les groupes ne sont pas synchronisés​

Problème : Les rôles Lucca ne correspondent pas aux groupes VaultysHub

Solution : c'est le comportement attendu. VaultysHub ne transmet pas les groupes : attribuez les rôles directement dans Lucca.

Erreur "Utilisateur non autorisé pour ce module"​

Problème : L'utilisateur SSO n'a pas accès à certains modules

Solution :

  1. Vérifiez les licences attribuées dans Lucca
  2. Contrôlez les permissions du rôle de l'utilisateur
  3. Assurez-vous que le module est activé pour l'utilisateur

Problème de synchronisation des managers​

Problème : La hiérarchie n'est pas correctement synchronisée

Solution : VaultysHub ne transmet pas le manager de l'utilisateur. Gérez la hiérarchie directement dans Lucca.

Sécurité​

Configuration recommandée​

{
"security_settings": {
"enforce_sso": true,
"session_timeout": "8h",
"ip_filtering": {
"enabled": true,
"allowed_ips": ["10.0.0.0/8", "192.168.0.0/16"]
},
"api_security": {
"token_rotation": "30d",
"rate_limiting": true,
"audit_api_calls": true
},
"data_protection": {
"encryption_at_rest": true,
"anonymize_exports": true,
"gdpr_compliant": true
}
}
}

Conformité RGPD​

Lucca est conforme RGPD avec :

  • Hébergement des données en France
  • Droit à l'oubli
  • Portabilité des données
  • Chiffrement des données sensibles
  • Audit trail complet

Migration des utilisateurs existants​

Script de migration​

import csv
import requests
from datetime import datetime

class LuccaSSOMigration:
def __init__(self, api_key, instance):
self.api_key = api_key
self.instance = instance
self.api_url = f"https://{instance}.ilucca.net/api/v3"

def migrate_users_to_sso(self, user_list_file):
"""Migration batch vers SSO"""
results = []

with open(user_list_file, 'r', encoding='utf-8') as file:
reader = csv.DictReader(file)

for user in reader:
try:
# Activer SSO pour l'utilisateur
self.enable_sso_for_user(user['email'])

# Désactiver l'authentification par mot de passe
self.disable_password_auth(user['id'])

# Envoyer email de notification
self.send_migration_email(user['email'])

results.append({
'email': user['email'],
'status': 'success',
'timestamp': datetime.now()
})

except Exception as e:
results.append({
'email': user['email'],
'status': 'failed',
'error': str(e)
})

return results

def enable_sso_for_user(self, email):
# Implémenter l'activation SSO via API Lucca
pass

Ressources​