Authentification
L'API B2B de MCM utilise une clé API par client (un partenaire = un client = une clé). Le SDK injecte automatiquement l'en-tête à chaque requête sortante.
Clé API
Chaque organisation partenaire reçoit une clé API unique. Cette clé :
- Identifie votre organisation auprès de MCM (un client MCM = une clé).
- Détermine la portée des données — vous ne voyez que les données de votre client.
- Active des modules (
MaCarteDeMembre,Votez) selon votre contrat. Un endpoint protégé par[RequireModule(Votez)]retourne403 Forbiddensi votre client n'a pas le module activé. - Doit être gardée secrète — son vol équivaut à un accès complet aux données du client.
- Ne la committez pas dans le code source.
- Ne la partagez pas par courriel non chiffré.
- Utilisez les secrets utilisateurs (.NET), Azure Key Vault, AWS Secrets Manager.
- Faites la rotation régulièrement (au moins annuellement, après tout départ d'employé qui y avait accès).
Obtenir une clé
Contactez l'équipe MCM en précisant :
- Cas d'usage (sync, lecture, votez, conciliation, …).
- Environnement (dev, staging, prod).
- Contact technique (pour la rotation et la sécurité).
Pour les tests d'intégration automatisés, vous pouvez générer une clé jetable via l'endpoint /test. Voir Sandbox / client de test.
Configuration
Développement local (secrets utilisateurs)
dotnet user-secrets set "McmApi:ApiKey" "votre-cle-api"
dotnet user-secrets set "McmApi:BaseUrl" "https://mcm-dev.neosapiens.com/"
Production (Azure Key Vault)
builder.Configuration.AddAzureKeyVault(
new Uri("https://votre-keyvault.vault.azure.net/"),
new DefaultAzureCredential());
Variables d'environnement
export McmApi__ApiKey="votre-cle-api"
export McmApi__BaseUrl="https://mcm-dev.neosapiens.com/"
Comment ça fonctionne
Le SDK ajoute automatiquement les en-têtes :
x-api-key: <votre-cle-api>
Accept: application/json
Côté API, l'en-tête x-api-key est validé par ApiKeyAuthenticationHandler, qui résout le ClientId et le propage à tous les handlers MediatR. Vous n'avez rien à gérer manuellement.
Surcharge de clé par appel
Tous les clients exposent IBaseClient.ApiKey { get; set; }. Définissez-la pour surcharger temporairement la clé configurée globalement.
public class MultiTenantSync(ISyncClient syncClient)
{
public async Task SyncPour(string tenantApiKey, List<B2BUpsertEmployeDtoV2> employes)
{
syncClient.ApiKey = tenantApiKey;
try
{
await syncClient.Sync([], employes, []);
}
finally
{
syncClient.ApiKey = null; // retour à la clé par défaut
}
}
}
Non thread-safe.
IBaseClient.ApiKeymodifie l'instance partagée. Si plusieurs threads partagent le mêmeISyncClient, les overrides peuvent se chevaucher.
Pattern multi-tenant recommandé
Si vous gérez plusieurs clients MCM depuis une même application (SaaS qui dessert N syndicats), créez un scope DI par tenant :
public class TenantSyncService(IServiceScopeFactory scopeFactory)
{
public async Task SyncTenant(string tenantApiKey, /* … */)
{
await using var scope = scopeFactory.CreateAsyncScope();
var sync = scope.ServiceProvider.GetRequiredService<ISyncClient>();
sync.ApiKey = tenantApiKey; // override sur l'instance scopée
await sync.Sync(/* … */);
}
}
Chaque scope obtient sa propre instance ; pas de course entre tenants.
Pour des volumes vraiment massifs (50+ locataires concurrents), envisagez d'enregistrer un
HttpClientdistinct par tenant viaIHttpClientFactoryplutôt que de muterApiKey. Le SDK ne le fait pas par défaut, mais c'est compatible.
Erreurs d'authentification
| Code HTTP | ErrorType | Description | Action |
|---|---|---|---|
401 | Unauthorized | Clé API invalide, manquante, ou pour un autre environnement | Vérifier McmApi:ApiKey et BaseUrl |
403 | Forbidden | Module non activé pour ce client | Demander à l'admin MCM d'activer le module concerné |
var result = await employesClient.GetAllEmployes();
if (result.IsError && result.FirstError.Type == ErrorType.Unauthorized)
{
logger.LogError("Échec d'authentification — vérifiez votre clé et l'environnement");
}
Rotation de clé
Si la clé est compromise ou expire :
- Demandez une nouvelle clé à l'admin MCM.
- Provisionnez la nouvelle clé en parallèle (Key Vault → nouvelle version).
- Déployez votre application avec la nouvelle clé.
- Confirmez le bon fonctionnement.
- Révoquez l'ancienne clé via l'admin MCM.
MCM peut maintenir deux clés actives simultanément pendant la fenêtre de rotation. Coordonnez via le canal sécurisé.