Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Lorsque votre application s’authentifie auprès du Plateforme d'identités Microsoft, elle présente des informations d’identification pour prouver son identité. Microsoft. Identity.Web prend en charge plusieurs types d’informations d’identification, chacun adapté à différents environnements et exigences de sécurité.
Cet article vous aide à comprendre les types d’informations d’identification disponibles, à en choisir un pour votre scénario et à configurer les informations d’identification dans votre application.
Pourquoi le choix des informations d’identification importe
Les informations d’identification que votre application utilise affectent directement sa posture de sécurité, sa surcharge opérationnelle et sa flexibilité de déploiement. Les informations d’identification mal choisies peuvent exposer des secrets, nécessiter une rotation manuelle ou limiter l’exécution de votre application.
Microsoft. Identity.Web fournit un modèle de configuration unifié qui vous permet de :
- Spécifiez plusieurs informations d'identification avec basculement automatique.
- Modifiez les types d’informations d’identification sans modifier le code de l’application.
- Utilisez différentes informations d’identification par environnement (développement, préproduction, production).
Types d’informations d’identification pris en charge
Microsoft. Identity.Web prend en charge trois catégories d’informations d’identification pour les applications clientes confidentielles :
Informations d’identification sans certificat (informations d’identification d’identité fédérée + identité managée)
Les informations d’identification sans certificat utilisent Azure Identité managée combinée avec les informations d’identification d’identité fédérée (FIC) pour authentifier votre application sans gérer de secrets ou de certificats. Azure gère entièrement le cycle de vie des informations d’identification.
How it works : Votre application utilise son identité managée pour obtenir un jeton, que l'Plateforme d'identités Microsoft accepte comme preuve de l'identité de l'application par le biais d'une approbation de fédération préconfigurée.
Idéal pour : Les charges de travail de production s’exécutant sur Azure.
En savoir plus sur l’authentification sans certificat
Certificats
Les certificats fournissent une authentification forte basée sur des clés asymétriques. Votre application prouve son identité en signant une assertion avec la clé privée du certificat. Microsoft. Identity.Web peut charger des certificats à partir de plusieurs sources :
- Azure Key Vault - Stockage de certificats managés centralisé avec des stratégies d’accès.
- Certificate Store - magasin de certificats Windows (CurrentUser ou LocalMachine).
- Chemin d’accès au fichier - Fichier de certificat sur le disque (format .pfx).
- Codé en base64 - Certificat incorporé directement dans la configuration.
Meilleur pour : Charges de travail de production où les informations d’identification sans certificat ne sont pas disponibles ou les environnements hybrides.
En savoir plus sur les informations d’identification de certificat
Clés secrètes client
Les secrets clients sont des chaînes partagées que votre application présente au Plateforme d'identités Microsoft. Il s’agit du type d’informations d’identification le plus simple à configurer, mais offre la sécurité la plus faible.
Meilleur pour : Développement et test locaux uniquement.
En savoir plus sur les secrets client
Choisir le type d’informations d’identification approprié
Utilisez l’arbre de décision suivant pour déterminer le type d’informations d’identification approprié pour votre scénario.
Is your application running on Azure?
├── Yes
│ ├── Can you use Managed Identity?
│ │ ├── Yes → Use certificateless credentials (recommended)
│ │ └── No → Use certificates from Azure Key Vault
└── No
├── Is this a production environment?
│ ├── Yes → Use certificates (Key Vault, Certificate Store, or file path)
│ └── No → Use client secrets for development/testing
Conseils généraux
Suivez ces principes lors de la sélection d’un type d’informations d’identification :
- Toujours préférer les informations d’identification sans certificat lorsque votre application s’exécute sur Azure. Ils éliminent entièrement la gestion des informations d’identification.
- Utilisez des certificats lorsque les informations d’identification sans certificat ne sont pas disponibles. Stockez-les dans Azure Key Vault dans la mesure du possible.
- Limitez les secrets client aux environnements de développement. N’utilisez jamais les secrets client dans les déploiements de production.
Comparer les types d’informations d’identification
Le tableau suivant résume les principales différences entre les types d’informations d’identification :
| Caractéristique | Sans certificat (FIC + MI) | Certificats | Clés secrètes client |
|---|---|---|---|
| Niveau de sécurité | Le plus élevé | Élevé | Low |
| Risque d’exposition au secret | Aucun - pas de secret à divulguer | Bas - clé privée protégée | Une chaîne de caractères peut être copiée |
| Rotation requise | Non - Azure gère le cycle de vie | Oui - avant l’expiration du certificat | Oui - avant l’expiration du secret |
| Complexité de la rotation | Aucun | Moyen - Mettre à jour le certificat, redéployer | Faible - mettre à jour la chaîne, redéployer |
| configuration du portail Azure | Identité gérée et confiance FIC | Charger un certificat pour l’enregistrement d’application | Générer un secret dans l’inscription d’application |
| Environnements appropriés | production Azure | Tout environnement de production | Développement et test uniquement |
| Dépendance de l’infrastructure | ressource de calcul Azure | Magasin de certificats ou Key Vault | Aucun |
| Conformité | Répond aux exigences de confiance zéro | Répond à la plupart des frameworks de conformité | Risque de ne pas respecter les stratégies de sécurité |
Configurer les informations d’identification dans appsettings.json
Microsoft. Identity.Web utilise un tableau ClientCredentials dans votre configuration pour spécifier une ou plusieurs informations d’identification. Chaque entrée dans le tableau inclut une SourceType propriété qui indique l’emplacement des informations d’identification.
Structure de configuration
L’exemple suivant montre une configuration minimale avec une seule information d’identification sans certificat :
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-client-id",
"ClientCredentials": [
{
"SourceType": "SignedAssertionFromManagedIdentity",
"ManagedIdentityClientId": "user-assigned-managed-identity-client-id"
}
]
}
}
Valeurs de TypeSource
La propriété SourceType correspond à l’énumération CredentialSource et détermine comment Microsoft. Identity.Web charge les informations d’identification :
| Valeur "SourceType" | Type d'identifiants | Description |
|---|---|---|
SignedAssertionFromManagedIdentity |
Sans certificat | Utilise l’identité managée pour obtenir une assertion signée. Recommandé pour Azure production. |
KeyVault |
Certificat | Charge un certificat à partir de Azure Key Vault par URI. |
StoreWithThumbprint |
Certificat | Charge un certificat à partir du magasin de certificats Windows par empreinte numérique. |
StoreWithDistinguishedName |
Certificat | Charge un certificat à partir du magasin de certificats Windows par nom unique de l’objet. |
Path |
Certificat | Charge un certificat à partir d’un fichier .pfx sur le disque. |
Base64Encoded |
Certificat | Charge un certificat à partir d’une chaîne encodée en Base64 dans la configuration. |
ClientSecret |
Secret de client | Utilise une chaîne de clé secrète client. |
AutoDecryptKeys |
Déchiffrement de jeton | Récupère automatiquement les clés pour déchiffrer les jetons chiffrés. |
SignedAssertionFilePath |
Fédéré | Lit une assertion signée à partir d’un chemin d’accès de fichier (pour l’identité de la charge de travail Kubernetes). |
Exemples d'identifiants par type
Les exemples suivants montrent comment configurer chaque type d’informations d'authentification dans appsettings.json, et, le cas échéant, dans le code C#.
Sans certificat (identité managée)
Utilisez une identité managée affectée par l’utilisateur en spécifiant son ID client :
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-client-id",
"ClientCredentials": [
{
"SourceType": "SignedAssertionFromManagedIdentity",
"ManagedIdentityClientId": "user-assigned-managed-identity-client-id"
}
]
}
}
Pour l’identité managée affectée par le système, omettez la ManagedIdentityClientId propriété :
{
"AzureAd": {
"ClientCredentials": [
{
"SourceType": "SignedAssertionFromManagedIdentity"
}
]
}
}
Certificat de Azure Key Vault
Chargez un certificat stocké dans Azure Key Vault en spécifiant l’URL du coffre et le nom du certificat :
{
"AzureAd": {
"ClientCredentials": [
{
"SourceType": "KeyVault",
"KeyVaultUrl": "https://your-keyvault.vault.azure.net",
"KeyVaultCertificateName": "your-certificate-name"
}
]
}
}
Vous pouvez également utiliser la méthode d’assistance CredentialDescription en C# :
var credential = CredentialDescription.FromKeyVault(
"https://your-keyvault.vault.azure.net",
"your-certificate-name");
Certificat du magasin de certificats
Chargez un certificat à partir du magasin de certificats Windows par empreinte numérique :
{
"AzureAd": {
"ClientCredentials": [
{
"SourceType": "StoreWithThumbprint",
"CertificateThumbprint": "ABC123DEF456...",
"CertificateStorePath": "CurrentUser/My"
}
]
}
}
Vous pouvez également utiliser un nom unique, ce qui simplifie la rotation des certificats, car le nouveau certificat est sélectionné automatiquement :
{
"AzureAd": {
"ClientCredentials": [
{
"SourceType": "StoreWithDistinguishedName",
"CertificateDistinguishedName": "CN=YourAppCertificate",
"CertificateStorePath": "CurrentUser/My"
}
]
}
}
En C#, utilisez la méthode d’assistance :
// By thumbprint
var credential = CredentialDescription.FromCertificateStore(
"CurrentUser/My",
thumbprint: "ABC123DEF456...");
// By distinguished name (recommended for rotation)
var credential = CredentialDescription.FromCertificateStore(
"CurrentUser/My",
distinguishedName: "CN=YourAppCertificate");
Certificat à partir du chemin d’accès au fichier
Chargez un certificat à partir d’un .pfx fichier sur le disque :
{
"AzureAd": {
"ClientCredentials": [
{
"SourceType": "Path",
"CertificateDiskPath": "/var/certs/app-cert.pfx",
"CertificatePassword": "certificate-password"
}
]
}
}
Avertissement
Évitez de stocker les mots de passe de certificat directement dans appsettings.json. Utilisez ASP.NET Core Secret Manager, les variables d’environnement ou les Azure Key Vault pour les valeurs sensibles.
Certificat codé en base64
Incorporez un certificat directement dans la configuration en tant que chaîne encodée en Base64 :
{
"AzureAd": {
"ClientCredentials": [
{
"SourceType": "Base64Encoded",
"Base64EncodedValue": "MIIKcQIBAzCCCi0..."
}
]
}
}
Secret de client
Spécifiez une chaîne de clé secrète client pour le développement et le test :
{
"AzureAd": {
"ClientCredentials": [
{
"SourceType": "ClientSecret",
"ClientSecret": "your-client-secret"
}
]
}
}
Avertissement
Les secrets client doivent être utilisés uniquement pendant le développement. Ne validez jamais des informations confidentielles dans un système de contrôle de version ou dans des environnements de production.
Utiliser plusieurs informations d’identification avec solution de repli
Vous pouvez spécifier plusieurs informations d’identification dans le ClientCredentials tableau. Microsoft. Identity.Web tente chaque information d’identification dans l’ordre et revient à la suivante si celle-ci échoue. Ce modèle est utile pour les applications qui s’exécutent dans plusieurs environnements.
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-client-id",
"ClientCredentials": [
{
"SourceType": "SignedAssertionFromManagedIdentity",
"ManagedIdentityClientId": "your-managed-identity-client-id"
},
{
"SourceType": "KeyVault",
"KeyVaultUrl": "https://your-keyvault.vault.azure.net",
"KeyVaultCertificateName": "your-certificate-name"
},
{
"SourceType": "ClientSecret",
"ClientSecret": "development-only-secret"
}
]
}
}
Dans cet exemple :
- L’application tente d’abord l’authentification sans certificat avec l’identité managée (fonctionne sur Azure).
- Si l’identité managée n’est pas disponible, elle revient à un certificat de Key Vault.
- En dernier recours, un secret client est utilisé (pour le développement local).
Cette approche vous permet d’utiliser le même fichier de configuration entre les environnements sans modification du code.
Configurer les informations d’identification dans le code
Vous pouvez également configurer des informations d’identification de manière programmatique dans Program.cs ou Startup.cs :
using Microsoft.Identity.Web;
builder.Services.AddMicrosoftIdentityWebAppAuthentication(builder.Configuration, "AzureAd")
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamApi("MyApi", builder.Configuration.GetSection("MyApi"))
.AddDistributedTokenCaches();
// Or configure credentials programmatically
builder.Services.Configure<MicrosoftIdentityOptions>(options =>
{
options.ClientCredentials = new[]
{
new CredentialDescription
{
SourceType = CredentialSource.SignedAssertionFromManagedIdentity,
ManagedIdentityClientId = "your-managed-identity-client-id"
}
};
});
Informations d’identification de déchiffrement de token
Au-delà des informations d’identification du client pour l’authentification, Microsoft. Identity.Web prend également en charge les informations d’identification pour le déchiffrement de jeton. Utilisez les informations d’identification de déchiffrement de jeton lorsque votre application reçoit des jetons chiffrés et doit les déchiffrer.
Les informations d’identification de déchiffrement de jeton utilisent les mêmes SourceType valeurs et modèles de configuration que les informations d’identification du client, mais sont spécifiées dans le TokenDecryptionCredentials tableau :
{
"AzureAd": {
"TokenDecryptionCredentials": [
{
"SourceType": "KeyVault",
"KeyVaultUrl": "https://your-keyvault.vault.azure.net",
"KeyVaultCertificateName": "token-decryption-cert"
}
]
}
}
En savoir plus sur le déchiffrement des jetons
Bonnes pratiques
Gardez ces recommandations à l’esprit lors de la configuration des informations d’identification pour votre application :
Préférez les identifiants sans certificat en production. Ils éliminent les risques d’exposition secrète et suppriment la surcharge de rotation. Utilisez-les chaque fois que votre application s’exécute sur Azure ressources de calcul qui prennent en charge l’identité managée.
Utilisez une solution de secours des informations d’identification pour la portabilité. Configurez plusieurs informations d’identification dans l’ordre de priorité afin que votre application fonctionne dans le développement, la préproduction et la production sans modification du code.
N’utilisez jamais les secrets client en production. Les secrets client peuvent fuiter via les journaux, les fichiers de configuration ou le contrôle de code source. Utilisez plutôt des certificats ou des informations d’identification sans certificat.
Stockez des valeurs sensibles en dehors des fichiers de configuration. Utilisez Azure Key Vault, les variables d’environnement ou le gestionnaire de secrets ASP.NET Core pour les mots de passe de certificat et les secrets client. Ne validez pas les valeurs sensibles dans le contrôle de code source.
Faire pivoter les certificats avant leur expiration. Surveillez les dates d’expiration du certificat et établissez un processus de rotation. Azure Key Vault pouvez automatiser le renouvellement des certificats.
Utilisez Azure Key Vault pour le stockage de certificats. Key Vault fournit une gestion centralisée, des stratégies d’accès, une journalisation d’audit et une rotation automatique pour les certificats.