Générer des jetons de preuve de possession pour les clés propagées
Vous pouvez utiliser les méthodes addKey et removeKey définies dans les ressources application et servicePrincipal pour déployer les clés qui expirent par programme.
Dans le cadre de la validation de la demande pour ces méthodes, une preuve de possession d’une clé existante est vérifiée avant que les méthodes ne puissent être invoquées. La preuve est représentée par un jeton JWT auto-signé. Ce jeton JWT doit être signé à l’aide de la clé privée de l’un des certificats valides existants de l’application. La durée de vie du jeton ne doit pas dépasser 10 minutes.
Note: Les applications qui n’ont aucun certificat valide existant (aucun certificat n’a encore été ajouté ou tous les certificats ont expiré) ne peuvent pas utiliser cette action de service. Vous pouvez utiliser l’opération de Mise à jour de l’application pour effectuer une mise à jour à la place.
Le jeton doit contenir les revendications suivantes :
- aud : l’audience doit être
00000002-0000-0000-c000-000000000000
. - iss : l’émetteur doit être l’ID de l’application ou de l’objet servicePrincipal qui lance la demande.
- nbf : Pas avant l’heure.
- exp : l’heure d’expiration doit être la valeur nbf + 10 minutes.
Vous pouvez utiliser les exemples de code suivants pour générer ce jeton de preuve de possession.
using System;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;
using Microsoft.IdentityModel.Tokens;
using Microsoft.IdentityModel.JsonWebTokens;
namespace MicrosoftIdentityPlatformProofTokenGenerator
{
class Program
{
static void Main(string[] args)
{
// Configure the following
string pfxFilePath = "<Path to your certificate file";
string password = "<Certificate password>";
string objectId = "<id of the application or servicePrincipal object>";
// Get signing certificate
X509Certificate2 signingCert = new X509Certificate2(pfxFilePath, password);
// audience
string aud = $"00000002-0000-0000-c000-000000000000";
// aud and iss are the only required claims.
var claims = new Dictionary<string, object>()
{
{ "aud", aud },
{ "iss", objectId }
};
// token validity should not be more than 10 minutes
var now = DateTime.UtcNow;
var securityTokenDescriptor = new SecurityTokenDescriptor
{
Claims = claims,
NotBefore = now,
Expires = now.AddMinutes(10),
SigningCredentials = new X509SigningCredentials(signingCert)
};
var handler = new JsonWebTokenHandler();
var x = handler.CreateToken(securityTokenDescriptor);
Console.WriteLine(x);
}
}
}
Vous pouvez également générer la preuve à l’aide de la signature dans Azure KeyVault. Il est important de noter que le caractère de remplissage '=' ne doit pas être inclus dans l’en-tête JWT et la charge utile, sinon une erreur Authentication_MissingOrMalformed sera retournée.
Contenu connexe
Maintenant que vous avez votre jeton de preuve de possession, vous pouvez l’utiliser pour :
- Ajoutez une clé ou supprimez une clé de votre application.
- Ajoutez une clé ou supprimez une clé de votre principal de service.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour