Generieren von Besitznachweistoken für rollierende Schlüssel

Sie können die Methoden addKey und removeKey verwenden, die für die Anwendung definiert sind, sowie die Ressourcen servicePrincipal für das programmgesteuerte Rollover von auslaufenden Schlüsseln.

Im Rahmen der Anforderungsüberprüfung für diese Methoden wird ein Besitznachweis eines vorhandenen Schlüssels überprüft, bevor die Methoden aufgerufen werden können. Der Nachweis wird durch ein selbstsigniertes JWT-Token dargestellt. Dieses JWT-Token muss mit dem privaten Schlüssel eines der vorhandenen gültigen Zertifikate der Anwendung signiert werden. Die Existenzdauer des Tokens sollte 10 Minuten nicht überschreiten.

Hinweis: Anwendungen, die über keine gültigen Zertifikate verfügen (es wurden noch keine Zertifikate hinzugefügt oder alle Zertifikate sind abgelaufen), können diese Dienstaktion nicht verwenden. Sie können den Vorgang Anwendung aktualisieren verwenden, um stattdessen ein Update durchzuführen.

Das Token sollte den folgenden Anforderungen enthalten:

  • aud: Zielgruppe muss sein 00000002-0000-0000-c000-000000000000.
  • iss: Aussteller sollte die ID des Anwendungs - oder servicePrincipal-Objekts sein, das die Anforderung initiiert.
  • nbf: Nicht vor der Zeit.
  • exp: Ablaufzeit sollte der Wert nbf + 10 Minuten sein.

Sie können die folgenden Codebeispiele verwenden, um dieses Besitznachweistoken zu generieren.

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);
        }
    }
}

Sie können den Nachweis auch mithilfe der Signatur in Azure KeyVault generieren. Es ist wichtig zu beachten, dass das Auffüllzeichen "=" nicht in den JWT-Header und die Nutzlast eingeschlossen werden darf, da andernfalls ein Authentication_MissingOrMalformed Fehler zurückgegeben wird.

Nachdem Sie nun über Ihr Token für den Besitznachweis verfügen, können Sie es für Folgendes verwenden: