Aller au contenu principal

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)] retourne 403 Forbidden si 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 partagez jamais votre clé API
  • 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 :

  1. Cas d'usage (sync, lecture, votez, conciliation, …).
  2. Environnement (dev, staging, prod).
  3. 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.ApiKey modifie l'instance partagée. Si plusieurs threads partagent le même ISyncClient, 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 HttpClient distinct par tenant via IHttpClientFactory plutôt que de muter ApiKey. Le SDK ne le fait pas par défaut, mais c'est compatible.

Erreurs d'authentification

Code HTTPErrorTypeDescriptionAction
401UnauthorizedClé API invalide, manquante, ou pour un autre environnementVérifier McmApi:ApiKey et BaseUrl
403ForbiddenModule non activé pour ce clientDemander à 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 :

  1. Demandez une nouvelle clé à l'admin MCM.
  2. Provisionnez la nouvelle clé en parallèle (Key Vault → nouvelle version).
  3. Déployez votre application avec la nouvelle clé.
  4. Confirmez le bon fonctionnement.
  5. 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é.

Voir aussi