Adicionar um certificado a um aplicativo usando o Microsoft Graph
Artigo
Microsoft Entra ID dá suporte a três tipos de credenciais para autenticar aplicativos e entidades de serviço: senhas (segredos do aplicativo), certificados e credenciais de identidade federadas. Se você não puder usar credenciais de identidade federadas para seu aplicativo, recomendamos fortemente que você use certificados em vez de segredos.
Este artigo fornece diretrizes para usar scripts do Microsoft Graph e do PowerShell para atualizar credenciais de certificado de forma programática para um registro de aplicativo.
Pré-requisitos
Para concluir este tutorial, você precisa dos seguintes recursos e privilégios:
Um locatário Microsoft Entra ativo.
Um cliente de API, como o Graph Explorer. Entre como usuário em uma função de Administrador de Aplicativo ou um usuário que tenha permissão para criar e gerenciar aplicativos no locatário.
O uso de certificados é altamente recomendado sobre segredos; no entanto, não recomendamos usar certificados autoassinados. Eles podem reduzir a barra de segurança do aplicativo devido a vários fatores, como o uso de um hash desatualizado e pacotes de criptografia ou falta de validação. Recomendamos a aquisição de certificados de uma autoridade de certificado confiável bem conhecida.
Etapa 1: Ler os detalhes do certificado
Para adicionar um certificado programaticamente usando o Microsoft Graph, você precisa da chave do certificado. Opcionalmente, você pode adicionar a impressão digital do certificado.
[Opcional] Obter a impressão digital do certificado
É opcional adicionar a impressão digital do certificado ao conteúdo da solicitação. Se você quiser adicionar a impressão digital, poderá executar a solicitação do PowerShell a seguir para ler a impressão digital do certificado. Essa solicitação pressupõe que você gerou e exportou o certificado para sua unidade local.
Solicitação
## Replace the file path with the source of your certificate
Get-PfxCertificate -Filepath "C:\Users\admin\Desktop\20230112.cer" | Out-File -FilePath "C:\Users\admin\Desktop\20230112.cer.thumbprint.txt"
Resposta
A saída salva no arquivo.txt pode ser semelhante à seguinte.
Para ler a chave do certificado usando o PowerShell, execute a solicitação a seguir.
Solicitação
PowerShell < 6:
## Replace the file path with the location of your certificate
[convert]::ToBase64String((Get-Content C:\Users\admin\Desktop\20230112.cer -Encoding byte)) | Out-File -FilePath "C:\Users\admin\Desktop\20230112.key.txt"
PowerShell >= 6:
## Replace the file path with the location of your certificate
[convert]::ToBase64String((Get-Content C:\Users\admin\Desktop\20230112.cer -AsByteStream)) | Out-File -FilePath "C:\Users\admin\Desktop\20230112.key.txt"
Resposta
A saída salva no arquivo.txt pode ser semelhante à seguinte.
Nota: A chave mostrada aqui foi abreviada para legibilidade.
Etapa 2: adicionar os detalhes do certificado usando o Microsoft Graph
Solicitação
A solicitação a seguir adiciona os detalhes do certificado a um aplicativo. As configurações são as seguintes:
O startDateTime é a data em que ou após a criação do certificado.
O endDateTime pode ser no máximo 1 ano a partir do startDateTime. Se não for especificado, o sistema atribuirá automaticamente uma data 1 ano após o startDateTime.
O tipo e o uso devem ser AsymmetricX509Cert e Verify , respectivamente.
Atribua o nome da entidade de certificado à propriedade displayName .
A chave é o valor codificado base64 que você gerou na etapa anterior.
Observação
Se seu aplicativo tiver um certificado válido existente que você deseja continuar usando para autenticação, inclua os detalhes atuais e novos do certificado no objeto keyCredentials do aplicativo. Como essa é uma chamada PATCH, que por protocolo substitui o conteúdo da propriedade pelos novos valores, incluindo apenas o novo certificado substituirá os certificados existentes pelo novo.
O exemplo a seguir adiciona um novo certificado e substitui todos os certificados existentes.
Nota: A chave mostrada aqui foi abreviada para legibilidade.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Models;
var requestBody = new Application
{
KeyCredentials = new List<KeyCredential>
{
new KeyCredential
{
EndDateTime = DateTimeOffset.Parse("2024-01-11T15:31:26Z"),
StartDateTime = DateTimeOffset.Parse("2023-01-12T15:31:26Z"),
Type = "AsymmetricX509Cert",
Usage = "Verify",
Key = Convert.FromBase64String("base64MIIDADCCAeigAwIBAgIQP6HEGDdZ65xJTcK4dCBvZzANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAgyMDIzMDExMjAeFw0yMzAxMTIwODExNTZaFw0yNDAxMTIwODMxNTZaMBMxETAPBgNVBAMMCDIwMjMwMTEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAseKf1weEacJ67D6/...laxQPUbuIL+DaXVkKRm1V3GgIpKTBqMzTf4tCpy7rpUZbhcwAFw6h9A=="),
DisplayName = "CN=20230112",
},
},
};
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Applications["{application-id}"].PatchAsync(requestBody);
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
Application application = new Application();
LinkedList<KeyCredential> keyCredentials = new LinkedList<KeyCredential>();
KeyCredential keyCredential = new KeyCredential();
OffsetDateTime endDateTime = OffsetDateTime.parse("2024-01-11T15:31:26Z");
keyCredential.setEndDateTime(endDateTime);
OffsetDateTime startDateTime = OffsetDateTime.parse("2023-01-12T15:31:26Z");
keyCredential.setStartDateTime(startDateTime);
keyCredential.setType("AsymmetricX509Cert");
keyCredential.setUsage("Verify");
byte[] key = Base64.getDecoder().decode("base64MIIDADCCAeigAwIBAgIQP6HEGDdZ65xJTcK4dCBvZzANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAgyMDIzMDExMjAeFw0yMzAxMTIwODExNTZaFw0yNDAxMTIwODMxNTZaMBMxETAPBgNVBAMMCDIwMjMwMTEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAseKf1weEacJ67D6/...laxQPUbuIL+DaXVkKRm1V3GgIpKTBqMzTf4tCpy7rpUZbhcwAFw6h9A==");
keyCredential.setKey(key);
keyCredential.setDisplayName("CN=20230112");
keyCredentials.add(keyCredential);
application.setKeyCredentials(keyCredentials);
Application result = graphClient.applications().byApplicationId("{application-id}").patch(application);
O exemplo a seguir adiciona um novo certificado sem substituir o certificado existente identificado pela impressão digital 52ED9B5038A47B9E2E2190715CC238359D4F8F73.
Nota: A chave mostrada aqui foi abreviada para legibilidade.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Models;
var requestBody = new Application
{
KeyCredentials = new List<KeyCredential>
{
new KeyCredential
{
EndDateTime = DateTimeOffset.Parse("2024-01-11T15:31:26Z"),
StartDateTime = DateTimeOffset.Parse("2023-01-12T09:31:26Z"),
Type = "AsymmetricX509Cert",
Usage = "Verify",
Key = Convert.FromBase64String("base64MIIDADCCAeigAwIBAgIQejfrj3S974xI//npv7hFHTANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAgyMDIzMDExNDAeFw0yMzAxMTIwOTA4NThaFw0yNDAxMTIwOTI4NThaMBMxETAPBgNVBAMMCDIwMjMwMTE0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt5vEj6j1l5wOVHR4eDGe77HWslaIVJ1NqxrXPm/...+R+U7sboj+kUvmFzXI+Ge73Liu8egL2NzOHHpO43calWgq36a9YW1yhBQR1ioEchu6jmudW3rF6ktmVqQ=="),
DisplayName = "CN=20230114",
},
new KeyCredential
{
CustomKeyIdentifier = Convert.FromBase64String("52ED9B5038A47B9E2E2190715CC238359D4F8F73"),
Type = "AsymmetricX509Cert",
Usage = "Verify",
Key = Convert.FromBase64String("base64MIIDADCCAeigAwIBAgIQfoIvchhpToxKEPI4iMrU1TANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAgyMDIzMDExMzAeFw0yMzAxMTIwODI3NTJaFw0yNDAxMTIwODQ3NTJaMBMxETAPBgNVBAMMCDIwMjMwMTEzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw+iqg1nMjYmFcFJh/.../S5X6qoEOyJBgtfpSBANWAdA=="),
DisplayName = "CN=20230113",
},
},
};
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Applications["{application-id}"].PatchAsync(requestBody);
Você usou o Microsoft Graph para atualizar credenciais de certificado para um objeto de aplicativo. Esse processo é uma alternativa programática ao uso do centro de administração do Microsoft Entra. Você também pode atualizar as credenciais de certificado para uma entidade de serviço seguindo um processo semelhante e chamando o https://graph.microsoft.com/v1.0/servicePrincipals/ ponto de extremidade.
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, consulte https://aka.ms/ContentUserFeedback.