Jamespot
Dieser Leitfaden erklärt, wie man die Single Sign-On (SSO)-Authentifizierung zwischen SmartLink und Jamespot unter Verwendung von SAML 2.0 konfiguriert.
Voraussetzungen
- Jamespot Pro- oder Enterprise-Abonnement
- Administratorzugriff auf Jamespot
- Überprüfte E-Mail-Domain
- Anwendung in SmartLink mit SAML2 konfiguriert
Hinweis: SSO ist mit den Angeboten Jamespot Pro und Enterprise verfügbar.
Konfiguration in SmartLink
1. Anwendung erstellen
- Melden Sie sich als Administrator bei SmartLink an
- Gehen Sie zu Anwendungen → Hinzufügen
- Erstellen Sie eine neue Anwendung:
- Name: Jamespot
- URL:
https://[your-organization].jamespot.com - Beschreibung: Digitale französische Arbeitsumgebung
- Symbol: Wählen Sie das Jamespot-Symbol aus
2. SAML2 konfigurieren
- Im Tab Authentifizierung
- Wählen Sie SAML2
- Konfigurieren Sie die folgenden Parameter:
- Entity ID:
[appid] - ACS-URL:
https://[your-organization].jamespot.com/saml/acs - Format NameID:
emailAddress - App-ID:
[appid](automatisch generierte eindeutige Kennung)
- Entity ID:
3. Metadaten abrufen
Notieren Sie sich die folgenden URLs:
- IdP-Metadaten:
https://[your-smartlink].link.vaultys.org/api/saml2/[appid]/metadata - SSO-URL:
https://[your-smartlink].link.vaultys.org/api/saml2/[appid]/sso - SLO-URL:
https://[your-smartlink].link.vaultys.org/api/saml2/[appid]/slo - Entity ID:
https://[your-smartlink].link.vaultys.org/[appid] - X.509-Zertifikat: Herunterladen von SmartLink
Konfiguration in Jamespot
1. Zugriff auf SSO-Einstellungen
- Melden Sie sich als Administrator bei Jamespot an
- Gehen Sie zu Verwaltung → Allgemeine Einstellungen → Authentifizierung
- Klicken Sie auf SSO SAML konfigurieren
2. Konfiguration des Identitätsanbieters
Konfigurieren Sie die SAML-Parameter:
- IdP-Entity-ID:
[appid] - SSO-Login-URL:
https://[your-smartlink].link.vaultys.org/api/saml2/[appid]/sso - SSO-Logout-URL:
https://[your-smartlink].link.vaultys.org/api/saml2/[appid]/slo - Öffentlicher IdP-Zertifikat: Fügen Sie das X.509-Zertifikat von SmartLink ein
- Binding:
HTTP-POST
3. Attributkonfiguration
| Jamespot-Attribut | SAML-Attribut | Erforderlich |
|---|---|---|
email | ✅ | |
| Vorname | givenName | ✅ |
| Nachname | surname | ✅ |
| Vollständiger Name | displayName | ❌ |
| Service | department | ❌ |
| Funktion | jobTitle | ❌ |
| Telefon | telephoneNumber | ❌ |
| Mobiltelefon | mobile | ❌ |
| Standort | location | ❌ |
Konfiguration von Räumen und Gruppen
Raumstruktur
spaces:
- name: "Unternehmensraum"
type: "Organisation"
access: "Alle Benutzer"
features:
- Neuigkeiten
- Unternehmensverzeichnis
- Organigramm
- Ankündigungen
- name: "Projektraum"
type: "Projekt"
access: "Nur Mitglieder"
features:
- Aufgabenverwaltung
- Dokumentenaustausch
- Teamkalender
- Wikis
- name: "Innovationsraum"
type: "Community"
access: "Öffentlich"
features:
- Ideenbox
- Innovationswettbewerbe
- Umfragen
- Foren
Gruppensynchronisierung
{
"group_mapping": {
"smartlink-admins": {
"jamespot_role": "Administrator",
"permissions": ["Plattform verwalten", "Benutzer verwalten", "Inhalte verwalten"]
},
"smartlink-managers": {
"jamespot_role": "Raum-Manager",
"permissions": ["Räume erstellen", "Mitglieder verwalten", "Inhalte moderieren"]
},
"smartlink-employees": {
"jamespot_role": "Mitwirkender",
"permissions": ["Inhalte erstellen", "Teilnehmen", "Zusammenarbeiten"]
},
"smartlink-external": {
"jamespot_role": "Gast",
"permissions": ["Öffentlich anzeigen", "Eingeschränkte Interaktion"]
}
}
}
Module und Funktionen
Unternehmenssoziales Netzwerk
social_features:
wall:
enabled: true
moderation: automatic
content_types:
- Beiträge
- Artikel
- Veranstaltungen
- Umfragen
- Ideen
interactions:
likes: true
comments: true
shares: true
mentions: true
hashtags: true
gamification:
points: true
badges: true
leaderboard: true
challenges: true
Dokumentenverwaltung
{
"document_management": {
"storage_quota": "100GB",
"version_control": true,
"co_editing": {
"enabled": true,
"office_suite": "onlyoffice"
},
"permissions": {
"folder_level": true,
"file_level": true,
"sharing_control": true
},
"search": {
"full_text": true,
"ocr": true,
"metadata": true
}
}
}
Geschäftsanwendungen
business_apps:
- name: "Projektmanagement"
features:
- Gantt-Diagramme
- Kanban-Boards
- Zeiterfassung
- Ressourcenplanung
- name: "Wissensdatenbank"
features:
- Wikis
- FAQs
- Tutorials
- Best Practices
- name: "Innovation"
features:
- Ideenmanagement
- Innovationskampagnen
- Abstimmungssystem
- ROI-Verfolgung
Jamespot-API
Client-API mit SSO
const axios = require('axios');
class JamespotAPI {
constructor(config) {
this.baseUrl = `https://${config.domain}.jamespot.com/api/v3`;
this.apiKey = config.apiKey;
this.headers = {
'Authorization': `Bearer ${this.apiKey}`,
'Content-Type': 'application/json'
};
}
async getUserBySSOEmail(email) {
const response = await axios.get(`${this.baseUrl}/users`, {
params: { email },
headers: this.headers
});
return response.data;
}
async createSpace(spaceData) {
const response = await axios.post(`${this.baseUrl}/spaces`, {
name: spaceData.name,
type: spaceData.type,
description: spaceData.description,
members: spaceData.members,
settings: {
visibility: spaceData.visibility || 'private',
moderation: spaceData.moderation || true
}
}, { headers: this.headers });
return response.data;
}
async publishContent(spaceId, content) {
const response = await axios.post(`${this.baseUrl}/spaces/${spaceId}/posts`, {
title: content.title,
body: content.body,
type: content.type,
tags: content.tags,
attachments: content.attachments
}, { headers: this.headers });
return response.data;
}
}
Webhooks
// Endpunkt für Jamespot-Webhooks
app.post('/webhook/jamespot', async (req, res) => {
const { event, payload } = req.body;
const signature = req.headers['x-jamespot-signature'];
// Überprüfen der Signatur
if (!verifySignature(signature, req.body, process.env.JAMESPOT_WEBHOOK_SECRET)) {
return res.status(401).json({ error: 'Ungültige Signatur' });
}
switch(event) {
case 'user.login':
await trackUserLogin(payload);
break;
case 'content.created':
await processNewContent(payload);
break;
case 'space.member.added':
await notifyNewMember(payload);
break;
case 'task.completed':
await updateProjectStatus(payload);
break;
}
res.status(200).json({ received: true });
});
Konfigurationstest
1. Verbindungstest
- Melden Sie sich von Jamespot ab
- Gehen Sie zu
https://[your-organization].jamespot.com - Klicken Sie auf Mit SSO anmelden
- Authentifizieren Sie sich über SmartLink
- Überprüfen Sie den Zugriff auf Ihre Räume
2. API-Test
# Benutzerinformationen abrufen
curl -X GET "https://[your-organization].jamespot.com/api/v3/me" \
-H "Authorization: Bearer YOUR_API_KEY"
3. Mobiler Test
Verfügbare Jamespot-Anwendungen:
- Jamespot Mobile (iOS/Android)
- Vollständige Unterstützung von SSO
- Push-Benachrichtigungen
Fehlerbehebung
Fehler "SAML-Antwort ist ungültig"
Problem: Die SAML-Antwort wird abgelehnt
Lösung:
- Stellen Sie sicher, dass die Entity-ID
[appid]ist - Überprüfen Sie das X.509-Zertifikat (PEM-Format)
- Stellen Sie sicher, dass die ACS-URL korrekt ist
- Überprüfen Sie die Protokolle: Verwaltung → Systemprotokolle
Gruppen werden nicht synchronisiert
Problem: Die Jamespot-Rollen stimmen nicht mit den SmartLink-Gruppen überein
Lösung:
<!-- SAML-Assertion für Gruppen -->
<saml:Attribute Name="memberOf">
<saml:AttributeValue>CN=jamespot-admins,OU=Groups,DC=example,DC=com</saml:AttributeValue>
<saml:AttributeValue>CN=jamespot-users,OU=Groups,DC=example,DC=com</saml:AttributeValue>
</saml:Attribute>
Sitzungsproblem
Problem: Die Sitzung läuft zu schnell ab
Lösung:
- Erhöhen Sie die Sitzungsdauer in Jamespot
- Überprüfen Sie die Sitzungskonfiguration in SmartLink
- Passen Sie die Timeout-Einstellungen auf beiden Seiten an
Sicherheit
Empfohlene Konfiguration
{
"security_settings": {
"enforce_sso": true,
"session_timeout": "8h",
"concurrent_sessions": false,
"ip_restrictions": {
"enabled": false,
"whitelist": []
},
"content_security": {
"moderation": "ai_assisted",
"dlp": true,
"watermarking": false
},
"audit": {
"enabled": true,
"retention": "2y",
"export_format": "csv"
}
}
}
GDPR-Konformität
Jamespot ist GDPR-konform mit:
- Datenhosting in Frankreich
- Recht auf Löschung
- Datenportabilität
- Verarbeitungsverzeichnis
- Benennung eines Datenschutzbeauftragten
Benutzermigration
Migrations-Skript
import csv
import requests
from datetime import datetime
class JamespotMigration:
def __init__(self, domain, api_key):
self.domain = domain
self.api_key = api_key
self.base_url = f"https://{domain}.jamespot.com/api/v3"
def migrate_to_sso(self, users_csv):
"""Migriere Benutzer zu SSO"""
results = []
with open(users_csv, 'r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for user in reader:
try:
# Aktiviere SSO für den Benutzer
response = requests.patch(
f"{self.base_url}/users/{user['id']}",
headers={'Authorization': f'Bearer {self.api_key}'},
json={
'authentication_method': 'sso',
'sso_email': user['email']
}
)
if response.status_code == 200:
results.append({
'email': user['email'],
'status': 'Erfolgreich',
'timestamp': datetime.now()
})
# Sende Benachrichtigungs-E-Mail
self.send_notification(user['email'])
else:
results.append({
'email': user['email'],
'status': 'Fehlgeschlagen',
'error': response.text
})
except Exception as e:
results.append({
'email': user['email'],
'status': 'Fehler',
'error': str(e)
})
return results
def send_notification(self, email):
"""Sende eine Benachrichtigungs-E-Mail für die SSO-Migration"""
# Implementiere den E-Mail-Versand
pass