Gerar a prova de tokens de posse para chaves de rolamento
Você pode usar os métodos addKey e removeKey definidos no aplicativo e recursos servicePrincipal para acumular as chaves expiradas por programação.
Como parte da solicitação de validação para esses métodos, uma comprovação de posse de uma chave existente é verificada antes que os métodos possam ser invocados. As comprovações são representadas por um token JWT autoassinado. Esse token de JWT deve ser assinado usando a chave privada de um dos certificados válidos existentes do aplicativo. O tempo de vida do token não deve exceder 10 minutos.
Nota: Aplicativos que não têm certificados válidos existentes (nenhum certificado foi adicionado ainda ou todos os certificados expiraram), não podem usar essa ação de serviço. Você pode usar a operação Atualizar aplicativo para executar uma atualização.
O token deve conter os seguintes argumentos:
- aud: O público precisa ser
00000002-0000-0000-c000-000000000000
. - iss: o emissor deve ser a ID do aplicativo ou do objeto servicePrincipal que inicia a solicitação.
- nbf: não antes do tempo.
- exp: o tempo de expiração deve ser o valor de nbf + 10 minutos.
Você pode usar os exemplos de código a seguir para gerar esse token de prova de posse.
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);
}
}
}
Você também pode gerar a prova usando a assinatura no Azure KeyVault. É importante observar que o caractere de preenchimento '=' não deve ser incluído no cabeçalho JWT e na carga ou um erro de Authentication_MissingOrMalformed será retornado.
Conteúdo relacionado
Agora que você tem seu token de prova de posse, você pode usá-lo para:
- Adicione uma chave ou remova uma chave do aplicativo.
- Adicione uma chave ou remova uma chave da entidade de serviço.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de