Zum Hauptinhalt springen

Lucca

Dieser Leitfaden erklärt, wie man die Einmalanmeldung (SSO) zwischen SmartLink und Lucca mithilfe von SAML 2.0 oder OpenID Connect konfiguriert.

Voraussetzungen​

  • Lucca-Konto mit aktiviertem SSO-Modul
  • Administratorzugriff auf Lucca
  • Anwendung in SmartLink mit SAML2 oder OpenID Connect konfiguriert
  • Überprüfte E-Mail-Domain

Hinweis: Die SSO erfordert die Aktivierung des SSO-Moduls in Ihrem Lucca-Vertrag.

Konfiguration mit OpenID Connect (Empfohlen)​

1. Anwendung erstellen​

  1. Melden Sie sich als Administrator bei SmartLink an
  2. Gehen Sie zu Anwendungen → Hinzufügen
  3. Erstellen Sie eine neue Anwendung:
    • Name: Lucca
    • URL: https://[your-instance].ilucca.net
    • Beschreibung: Vollständiges HRIS-Paket (Figgo, Pagga, Timmi usw.)
    • Symbol: Wählen Sie das Lucca-Symbol aus

2. OpenID Connect konfigurieren​

  1. Im Tab Authentifizierung
  2. Wählen Sie OpenID Connect
  3. Notieren Sie die Informationen:
    • Client-ID: lucca-xxxxxx
    • Client-Geheimnis: secret-xxxxxx
    • App-ID: [appid] (automatisch generierte eindeutige Kennung)

3. Erlaubte Umleitungs-URLs​

Fügen Sie in Erlaubte Umleitungs-URLs hinzu:

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

Konfiguration in Lucca​

1. Zugriff auf SSO-Einstellungen​

  1. Melden Sie sich als Administrator bei Lucca an
  2. Gehen Sie zu Konfiguration → Einstellungen → Authentifizierung
  3. Klicken Sie auf Single Sign-On (SSO)
  4. Wählen Sie OpenID Connect

2. Konfiguration des Identitätsanbieters​

Konfigurieren Sie die folgenden Einstellungen:

  • Discovery-URL: https://[your-smartlink].link.vaultys.org/api/oidc/[appid]/.well-known/openid-configuration
  • Client-ID: lucca-xxxxxx (aus SmartLink)
  • Client-Geheimnis: secret-xxxxxx (aus SmartLink)
  • Bereiche: openid Profil E-Mail Gruppen

3. Attributzuordnung​

Lucca-AttributOpenID-ClaimObligatorisch
E-MailE-Mail✅
Vornamegiven_name✅
Nachnamefamily_name✅
Personalnummeremployee_number❌
Abteilungdepartment❌
Managermanager_email❌

Konfiguration mit SAML 2.0​

1. SAML2 konfigurieren​

  1. In der Anwendung Lucca
  2. Tab Authentifizierung → SAML2
  3. Konfigurieren Sie:
    • Entitäts-ID: https://[your-smartlink].link.vaultys.org/[appid]
    • ACS-URL: https://[your-instance].ilucca.net/identity/saml2/acs
    • Format NameID: emailAddress

2. Metadaten abrufen​

Notieren Sie die URLs:

  • IdP-Metadaten: https://[your-smartlink].link.vaultys.org/api/saml2/[appid]/metadata
  • SSO-URL: https://[your-smartlink].link.vaultys.org/api/saml2/sso/[appid]
  • SLO-URL: https://[your-smartlink].link.vaultys.org/api/saml2/slo/[appid]
  • Entitäts-ID: https://[your-smartlink].link.vaultys.org/[appid]

Konfiguration in Lucca​

  1. In Konfiguration → Authentifizierung → SAML 2.0
  2. Importieren Sie die Metadaten oder konfigurieren Sie manuell:
    • IdP-Entitäts-ID: [appid]
    • SSO-URL: https://[your-smartlink].link.vaultys.org/api/saml2/sso/[appid]
    • X.509-Zertifikat: Importieren Sie es aus SmartLink

Konfiguration der Lucca-Module​

Figgo (Urlaubsverwaltung)​

{
"figgo_settings": {
"auto_provision": true,
"sync_managers": true,
"default_leave_policy": "standard",
"sso_groups_mapping": {
"smartlink-managers": "validateur_n1",
"smartlink-hr": "administrateur_rh",
"smartlink-employees": "collaborateur"
}
}
}

Pagga (Lohnabrechnung)​

{
"pagga_settings": {
"restricted_access": true,
"allowed_groups": ["smartlink-hr", "smartlink-payroll"],
"permissions": {
"smartlink-payroll": ["edit_bulletins", "export_dsn"],
"smartlink-hr": ["view_bulletins", "manage_employees"],
"smartlink-managers": ["view_team_bulletins"]
}
}
}

Timmi (Zeiterfassung)​

timmi_configuration:
projects:
sync_with_sso_groups: true
default_access: "member"

time_tracking:
mandatory: true
validation_workflow: "manager"

permissions:
smartlink-project-managers:
- create_projects
- manage_budgets
- view_all_timesheets
smartlink-employees:
- submit_timesheet
- view_own_timesheet

Poplee Core HR​

{
"poplee_settings": {
"employee_sync": {
"source": "sso",
"update_on_login": true,
"fields_mapping": {
"department": "{{department}}",
"job_title": "{{title}}",
"manager": "{{manager_email}}",
"location": "{{office_location}}"
}
}
}
}

Daten-Synchronisierung​

Lucca-API mit SSO​

const axios = require('axios');

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

async syncUserFromSSO(ssoUserData) {
// Benutzer anhand der E-Mail suchen
const user = await this.getUserByEmail(ssoUserData.email);

if (!user) {
// Benutzer erstellen
return await this.createUser({
mail: ssoUserData.email,
firstName: ssoUserData.given_name,
lastName: ssoUserData.family_name,
department: ssoUserData.department,
authenticationMode: 'sso'
});
} else {
// Benutzer aktualisieren
return await this.updateUser(user.id, {
department: ssoUserData.department,
jobTitle: ssoUserData.title
});
}
}

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];
}
}

Lucca-Webhooks​

// Endpunkt zum Empfangen von Lucca-Webhooks
app.post('/webhook/lucca', async (req, res) => {
const { event, data } = req.body;

switch(event) {
case 'user.created':
// Bei Bedarf mit SmartLink synchronisieren
await syncNewUserToSmartLink(data);
break;

case 'leave.approved':
// Über SmartLink benachrichtigen
await sendNotification(data.userId, 'Ihr Urlaubsantrag wurde genehmigt');
break;

case 'timesheet.submitted':
// Validierungsworkflow auslösen
await triggerValidationWorkflow(data);
break;
}

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

Konfigurationstest​

1. Verbindungstest​

  1. Melden Sie sich von Lucca ab
  2. Gehen Sie zu https://[your-instance].ilucca.net
  3. Klicken Sie auf Mit SSO anmelden
  4. Geben Sie Ihre geschäftliche E-Mail-Adresse ein
  5. Authentifizieren Sie sich über SmartLink
  6. Überprüfen Sie den Zugriff auf die verschiedenen Lucca-Module

2. Berechtigungstest​

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

3. Mobile Test​

Die Lucca Mobile-Apps unterstützen SSO:

  • Figgo Mobile (iOS/Android)
  • Timmi Mobile
  • Lucca Mobile (vereinheitlichte App)

Fehlerbehebung​

Fehler "SSO-Authentifizierung fehlgeschlagen"​

Problem: Die SSO-Authentifizierung funktioniert nicht

Lösung:

  1. Überprüfen Sie, ob die Entitäts-ID [appid] für SAML ist
  2. Für OIDC überprüfen Sie die Discovery-URL
  3. Stellen Sie sicher, dass die E-Mail in Lucca vorhanden ist
  4. Überprüfen Sie die Protokolle: Konfiguration → Authentifizierungsprotokolle

Gruppen werden nicht synchronisiert​

Problem: Die Lucca-Rollen entsprechen nicht den SmartLink-Gruppen

Lösung:

// Richtige Konfiguration der Claims für Gruppen
{
"groups_claim": "groups",
"groups_mapping": {
"smartlink-rh": "ADMIN_RH",
"smartlink-managers": "MANAGER",
"smartlink-employees": "COLLABORATEUR"
}
}

Fehler "Benutzer nicht für dieses Modul autorisiert"​

Problem: Der SSO-Benutzer hat keinen Zugriff auf bestimmte Module

Lösung:

  1. Überprüfen Sie die zugewiesenen Lizenzen in Lucca
  2. Überprüfen Sie die Berechtigungen der Benutzerrolle
  3. Stellen Sie sicher, dass das Modul für den Benutzer aktiviert ist

Problem mit der Synchronisierung von Managern​

Problem: Die Hierarchie wird nicht korrekt synchronisiert

Lösung:

<!-- SAML-Attribut für den Manager -->
<saml:Attribute Name="manager_email">
<saml:AttributeValue>manager@unternehmen.de</saml:AttributeValue>
</saml:Attribute>

Sicherheit​

Empfohlene Konfiguration​

{
"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
}
}
}

GDPR-Konformität​

Lucca ist GDPR-konform mit:

  • Datenhosting in Frankreich
  • Recht auf Vergessenwerden
  • Datenportabilität
  • Verschlüsselung sensibler Daten
  • Vollständiges Audit-Trail

Migration bestehender Benutzer​

Migrations-Skript​

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):
"""Batch-Migration zu SSO"""
results = []

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

for user in reader:
try:
# SSO für den Benutzer aktivieren
self.enable_sso_for_user(user['email'])

# Passwortauthentifizierung deaktivieren
self.disable_password_auth(user['id'])

# Benachrichtigungs-E-Mail senden
self.send_migration_email(user['email'])

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

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

return results

def enable_sso_for_user(self, email):
# Implementieren Sie die SSO-Aktivierung über die Lucca-API
pass

Ressourcen​