Table of Contents

Authentification vers vos systèmes

La bibliothèque du webhook fournit trois aides, dans l'espace de noms SESARWebHook.Core.Auth, pour que votre gestionnaire s'authentifie auprès du système qui reçoit les données. Créez-les dans Initialize, une fois, et réutilisez-les.

OAuth2, identifiants client

OAuth2ClientCredentialsHelper, pour Microsoft Entra ID, SharePoint et Dynamics 365.

var dynamics = OAuth2ClientCredentialsHelper.ForDynamics365(tenantId, clientId, clientSecret, "https://<organisation>.crm3.dynamics.com");
var graph = OAuth2ClientCredentialsHelper.ForSharePoint(tenantId, clientId, clientSecret, sharePointUrl);
var autre = OAuth2ClientCredentialsHelper.ForAzureAD(tenantId, clientId, clientSecret, "api://mon-api/.default");

string jeton = await dynamics.GetAccessTokenAsync();
Fabrique Portée demandée
ForDynamics365 {dynamicsUrl}/.default
ForSharePoint https://graph.microsoft.com/.default, quelle que soit l'adresse SharePoint passée
ForAzureAD La portée que vous passez

Le point de jeton est celui du cloud public de Microsoft : https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token.

OAuth2, jeton de rafraîchissement

OAuth2RefreshTokenHelper, pour les services qui délivrent un jeton de rafraîchissement de longue durée.

Fabrique Point de jeton
ForZoho(clientId, clientSecret, refreshToken, accountsDomain) {accountsDomain}/oauth/v2/token, par défaut https://accounts.zoho.com
ForGoogle(clientId, clientSecret, refreshToken) https://oauth2.googleapis.com/token
ForSalesforce(clientId, clientSecret, refreshToken, isSandbox) https://login.salesforce.com ou, avec isSandbox, https://test.salesforce.com
ForHubSpot(clientId, clientSecret, refreshToken) https://api.hubapi.com/oauth/v1/token

Si le fournisseur renvoie un nouveau jeton de rafraîchissement, l'aide l'ignore et garde l'ancien. Pour un fournisseur qui fait tourner ses jetons de rafraîchissement, gérez-les vous-même.

Comportement commun des aides OAuth2

  • Le jeton d'accès est gardé en mémoire et renouvelé à la demande, 60 secondes avant son expiration. L'obtention est protégée contre les appels simultanés.
  • Une aide par identifiants client ne garde pas en mémoire un jeton sans durée de validité (expires_in) : chaque appel en redemande un.
  • Un refus du fournisseur lève une OAuth2Exception, dont RawResponse contient la réponse brute. Ne la journalisez pas telle quelle : elle peut contenir des détails sur votre locataire.
  • Si votre système répond 401, appelez InvalidateToken(), puis réessayez une fois : les aides ne le font pas d'elles-mêmes.
  • TestConnectionAsync() obtient un jeton et renvoie false en cas d'échec, sans lever d'exception.

Clé d'API

ApiKeyHelper ajoute une clé d'API à vos requêtes.

var auth = ApiKeyHelper.InHeader("X-API-Key", apiKey);
auth.ApplyTo(request); // request : HttpRequestMessage
Fabrique Effet
InHeader(headerName, apiKey) En-tête de votre choix
AsBearer(apiKey) Authorization: Bearer <clé>
AsBasicAuth(username, apiKey) Authorization: Basic, clé en mot de passe
AsBasicAuthUsername(apiKey) Authorization: Basic, clé en nom d'utilisateur, mot de passe vide
InQueryString(paramName, apiKey) Paramètre de l'adresse
  • Préférez ApplyTo(HttpRequestMessage), requête par requête. ApplyTo(HttpClient) modifie un client qui peut être partagé : avec InHeader, chaque appel ajoute la valeur une fois de plus, et avec InQueryString, il lève une exception.
  • Évitez InQueryString : la clé, placée dans l'adresse, se retrouve dans les journaux des serveurs et des proxys.
  • Le mode Basic encode en ASCII : un caractère hors ASCII dans le nom ou la clé est altéré.

Secrets

Les identifiants de vos systèmes viennent du fichier de secrets, section Handlers.{id}.Secrets, et se lisent avec GetRequiredSetting. Ne les écrivez jamais dans appsettings.json ni dans le code.