HubSpot
Ce guide vous explique comment configurer l'authentification unique (SSO) entre VaultysHub et HubSpot en utilisant SAML 2.0.
Prérequis
- HubSpot Enterprise (Marketing Hub, Sales Hub, Service Hub ou CMS Hub)
- Accès Super Admin à HubSpot
- Domaine email vérifié dans HubSpot
- Application configurée dans VaultysHub avec SAML2
Note : Le SSO SAML est disponible uniquement avec les plans Enterprise de HubSpot.
Configuration dans VaultysHub
1. Créer l'application
- Connectez-vous à VaultysHub en tant qu'administrateur
- Allez dans Applications → Ajouter
- Créez une nouvelle application :
- Nom : HubSpot
- URL :
https://app.hubspot.com - Description : Plateforme CRM et marketing automation
- Icône : Choisissez l'icône HubSpot
2. Configurer SAML2
- Dans l'onglet Authentification
- Sélectionnez SAML2
- Configurez les paramètres suivants :
- Entity ID : l'Entity ID du Service Provider fourni par HubSpot (et non l'URL de VaultysHub)
- ACS URL :
https://app.hubspot.com/login/saml - Format NameID :
emailAddress - App ID :
[appid](identifiant unique généré automatiquement)
3. Récupérer les métadonnées
Notez les URLs suivantes :
- 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] - Certificat X.509 : Téléchargez depuis VaultysHub
La déconnexion unique (Single Logout) depuis VaultysHub n'est pas prise en charge.
Configuration dans HubSpot
1. Accéder aux paramètres SSO
- Connectez-vous à HubSpot en tant que Super Admin
- Cliquez sur l'icône Paramètres (⚙️)
- Dans le menu de gauche : Account Defaults → Security
- Cliquez sur l'onglet Single Sign-On
2. Configuration du fournisseur d'identité
Cliquez sur Configure SSO et remplissez :
Identity Provider Settings
- Identity Provider Single Sign-On URL :
https://[votre-smartlink].link.vaultys.org/api/saml2/sso/[appid] - Identity Provider Identifier :
https://[votre-smartlink].link.vaultys.org/[appid] - Verification Certificate : Collez le certificat X.509 depuis VaultysHub
Service Provider Settings (fourni par HubSpot)
Notez ces valeurs pour les configurer dans VaultysHub si nécessaire :
- Audience URI (SP Entity ID) :
https://api.hubspot.com - Sign on URL :
https://app.hubspot.com/login/saml
3. Configuration des attributs
Configurez le mapping des attributs SAML :
| Attribut HubSpot | Attribut SAML | Obligatoire |
|---|---|---|
email | ✅ | |
| First Name | firstName | ✅ |
| Last Name | lastName | ✅ |
4. Configuration des domaines
- Dans Security → Login Verification
- Ajoutez vos domaines d'entreprise
- Activez Require SSO pour ces domaines
Configuration des équipes et permissions
Structure des équipes
VaultysHub ne transmet pas les groupes de l'utilisateur : les équipes et les permissions sont attribuées directement dans HubSpot (Settings → Users & Teams).
Rôles personnalisés
Créez des rôles dans HubSpot :
- Settings → Users & Teams → Roles
- Créez les rôles dont vous avez besoin
- Assignez les permissions appropriées
Partitions (HubSpot Enterprise)
Pour isoler les données entre équipes :
partitions:
- name: "EMEA Sales"
teams: ["sales-emea"]
objects: ["contacts", "companies", "deals"]
- name: "Americas Sales"
teams: ["sales-americas"]
objects: ["contacts", "companies", "deals"]
- name: "Marketing Global"
teams: ["marketing"]
objects: ["marketing-emails", "workflows", "forms"]
Test de la configuration
1. Test de connexion
- Ouvrez une fenêtre de navigation privée
- Allez sur app.hubspot.com
- Cliquez sur Log in with SSO
- Entrez votre email d'entreprise
- Vous êtes redirigé vers VaultysHub
- Après authentification, vous accédez à HubSpot
2. Test des permissions
// Test via l'API HubSpot
const hubspot = require('@hubspot/api-client');
const hubspotClient = new hubspot.Client({
accessToken: process.env.HUBSPOT_ACCESS_TOKEN
});
async function testPermissions() {
try {
// Test lecture contacts
const contacts = await hubspotClient.crm.contacts.basicApi.getPage();
console.log('Contacts access: ✓');
// Test création deal
const deal = await hubspotClient.crm.deals.basicApi.create({
properties: {
dealname: 'Test SSO Deal',
amount: '1000'
}
});
console.log('Deal creation: ✓');
} catch (error) {
console.error('Permission denied:', error.message);
}
}
3. Vérification mobile
Les applications mobiles HubSpot supportent le SSO :
- HubSpot Mobile App
- HubSpot Keyboard (iOS)
- HubSpot CRM Scanner
Intégration avec les workflows
Déclencheurs basés sur l'authentification
// Workflow personnalisé déclenché à la connexion SSO
{
"trigger": {
"type": "user_login",
"conditions": {
"auth_method": "saml"
}
},
"actions": [
{
"type": "send_email",
"template": "welcome_sso_user",
"to": "{{user.email}}"
},
{
"type": "assign_onboarding_tasks",
"tasks": ["complete_profile", "watch_training", "setup_signature"]
}
]
}
Configuration des intégrations
HubSpot App Marketplace
Les apps du marketplace fonctionnent avec SSO :
{
"marketplace_apps": {
"salesforce": {
"sso_compatible": true,
"additional_auth": "oauth2"
},
"slack": {
"sso_compatible": true,
"workspace_linking": true
},
"zoom": {
"sso_compatible": true,
"calendar_sync": true
}
}
}
Webhooks et API
Configuration des webhooks avec authentification SSO :
// Webhook endpoint sécurisé
app.post('/webhooks/hubspot', verifyHubSpotSignature, async (req, res) => {
const { subscriptionType, objectId, propertyName, propertyValue } = req.body;
// Vérifier que l'utilisateur a les permissions via SSO
const user = await getUserFromWebhook(req);
if (!hasPermission(user, subscriptionType)) {
return res.status(403).json({ error: 'Insufficient permissions' });
}
// Traiter le webhook
await processWebhook(req.body);
res.status(200).send();
});
Dépannage
Erreur "Invalid SAML Response"
Problème : La réponse SAML n'est pas valide
Solution :
- Vérifiez que l'Entity ID est bien
https://[votre-smartlink].link.vaultys.org/[appid]dans VaultysHub - Vérifiez le certificat X.509 (format PEM, sans header/footer)
- Assurez-vous que l'ACS URL est :
https://app.hubspot.com/login/saml - Vérifiez les logs dans HubSpot : Settings → Audit Logs
Erreur "User not authorized for this account"
Problème : L'utilisateur n'a pas accès au compte HubSpot
Solution :
- Vérifiez que le domaine email est ajouté et vérifié
- Assurez-vous que l'utilisateur est provisionné dans HubSpot
- Vérifiez les permissions de l'utilisateur dans Users & Teams
Les équipes ne sont pas assignées
Problème : Les utilisateurs ne sont pas dans les bonnes équipes
Solution : VaultysHub ne transmet pas les groupes dans l'assertion SAML. Assignez les utilisateurs aux équipes directement dans HubSpot (Settings → Users & Teams).
Problème avec les applications mobiles
Problème : Impossible de se connecter via l'app mobile
Solution :
- Assurez-vous que l'option Allow mobile SSO est activée
- Utilisez le navigateur intégré de l'app, pas un navigateur externe
- Vérifiez que le certificat SSL est valide et reconnu
Sécurité
Configuration recommandée
{
"security_settings": {
"enforce_sso": true,
"session_timeout": "12h",
"require_2fa_for_api": true,
"ip_restrictions": {
"enabled": true,
"allowed_ips": ["203.0.113.0/24"]
},
"api_key_rotation": "90d",
"audit_log_retention": "2y",
"sensitive_data_masking": true
}
}
Conformité
- GDPR : HubSpot est conforme GDPR avec DPA disponible
- SOC 2 Type II : Certification disponible
- ISO 27001 : Certifié
- Privacy Shield : Framework EU-US/Swiss-US
Backup et récupération
Plan de récupération en cas de problème SSO :
- Compte Super Admin de secours avec authentification locale
- API keys pour accès programmatique d'urgence
- Documentation des procédures de récupération
- Contact support HubSpot Enterprise : support prioritaire 24/7
Migration des utilisateurs
Script de migration batch
import pandas as pd
from hubspot import HubSpot
from datetime import datetime
def migrate_users_to_sso(csv_file):
"""Migration en masse vers SSO"""
api_client = HubSpot(access_token=ADMIN_TOKEN)
users_df = pd.read_csv(csv_file)
migration_report = []
for index, user in users_df.iterrows():
try:
# Désactiver l'auth par mot de passe
api_client.settings.users.update(
user_id=user['user_id'],
properties={
'authentication_method': 'saml_only',
'password_login_enabled': False
}
)
# Envoyer notification
send_migration_email(user['email'])
migration_report.append({
'user': user['email'],
'status': 'success',
'timestamp': datetime.now()
})
except Exception as e:
migration_report.append({
'user': user['email'],
'status': 'failed',
'error': str(e)
})
return pd.DataFrame(migration_report)