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
RawResponsecontient 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 renvoiefalseen 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é : avecInHeader, chaque appel ajoute la valeur une fois de plus, et avecInQueryString, 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.