HubSpot
Ce guide vous explique comment configurer l'authentification unique (SSO) entre SmartLink 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 SmartLink avec SAML2
Note : Le SSO SAML est disponible uniquement avec les plans Enterprise de HubSpot.
Configuration dans SmartLink
1. Créer l'application
- Connectez-vous à SmartLink 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 :
https://[votre-smartlink].link.vaultys.org/[appid] - ACS URL :
https://app.hubspot.com/login/saml - Format NameID :
emailAddress - App ID :
[appid](identifiant unique généré automatiquement)
- Entity ID :
3. Récupérer les métadonnées
Notez les URLs suivantes :
- Métadonnées IdP :
https://[votre-smartlink].link.vaultys.org/api/saml2/[appid]/metadata - SSO URL :
https://[votre-smartlink].link.vaultys.org/api/saml2/sso/[appid] - SLO URL :
https://[votre-smartlink].link.vaultys.org/api/saml2/slo/[appid] - Entity ID :
https://[votre-smartlink].link.vaultys.org/[appid] - Certificat X.509 : Téléchargez depuis SmartLink
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 :
[appid] - Verification Certificate : Collez le certificat X.509 depuis SmartLink
Service Provider Settings (fourni par HubSpot)
Notez ces valeurs pour les configurer dans SmartLink 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 |
|---|---|---|
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress | ✅ | |
| First Name | http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname | ✅ |
| Last Name | http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname | ✅ |
| Groups | groups | ❌ |
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
{
"teams": {
"Sales": {
"permissions": ["contacts:read", "contacts:write", "deals:read", "deals:write"],
"saml_group": "smartlink-sales"
},
"Marketing": {
"permissions": ["marketing:all", "content:write", "campaigns:manage"],
"saml_group": "smartlink-marketing"
},
"Service": {
"permissions": ["tickets:all", "feedback:read", "knowledge:write"],
"saml_group": "smartlink-support"
},
"Admin": {
"permissions": ["super-admin"],
"saml_group": "smartlink-hubspot-admins"
}
}
}
Rôles personnalisés
Créez des rôles dans HubSpot :
- Settings → Users & Teams → Roles
- Créez des rôles correspondant à vos groupes SmartLink
- 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 SmartLink
- 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",
"user_group": "smartlink-new-users"
}
},
"actions": [
{
"type": "send_email",
"template": "welcome_sso_user",
"to": "{{user.email}}"
},
{
"type": "assign_onboarding_tasks",
"tasks": ["complete_profile", "watch_training", "setup_signature"]
}
]
}
Automatisations avec les groupes SSO
# Script pour assigner automatiquement les leads
def assign_leads_by_sso_group(user_email, sso_groups):
if 'smartlink-sales-emea' in sso_groups:
assign_to_team('EMEA Sales', user_email)
elif 'smartlink-sales-americas' in sso_groups:
assign_to_team('Americas Sales', user_email)
else:
assign_to_team('Global Sales Pool', user_email)
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
[appid]dans SmartLink - 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 :
<!-- Format correct de l'assertion SAML pour les groupes -->
<saml:Attribute Name="groups">
<saml:AttributeValue>smartlink-hubspot-sales</saml:AttributeValue>
<saml:AttributeValue>smartlink-hubspot-emea</saml:AttributeValue>
</saml:Attribute>
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)