Adicionar um certificado a um aplicativo usando o Microsoft Graph

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.

Você pode adicionar ou remover certificados usando o centro de administração do Microsoft Entra. No entanto, em cenários de automação, talvez seja necessário automatizar a distribuição de certificado para seu aplicativo ou entidade de serviço.

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.
  • Um certificado assinado que você usará para autenticar o aplicativo. Este artigo usa um certificado autoassinado para fins de demonstração. Para saber como criar um certificado autoassinado, consulte Criar um certificado público autoassinado para autenticar seu aplicativo.

Cuidado

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.

Thumbprint                                Subject
----------                                -------
5A126608ED1A1366F714A4A62B7015F3262840F1  CN=20230112

Obter a chave de certificado

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.

MIIDADCCAeigAwIBAgIQP6HEGDdZ65xJTcK4dCBvZzANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAgyMDIzMDExMjAeFw0yMzAxMTIwODExNTZaFw0yNDAxMTIwODMxNTZaMBMxETAPBgNVBAMMCDIwMjMwMTEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAseKf1weEacJ67D6/...dG+7WMIBsIUy0xz6MmyvfSohz3oNP4jHt7pJ9TyxnvDlaxQPUbuIL+DaXVkKRm1V3GgIpKTBqMzTf4tCpy7rpUZbhcwAFw6h9A==

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.

PATCH https://graph.microsoft.com/v1.0/applications/bb77f42f-dacb-4ece-b3e6-285e63c24d52
Content-type: application/json

{
    "keyCredentials": [
        {
            "endDateTime": "2024-01-11T15:31:26Z",
            "startDateTime": "2023-01-12T15:31:26Z",
            "type": "AsymmetricX509Cert",
            "usage": "Verify",
            "key": "base64MIIDADCCAeigAwIBAgIQP6HEGDdZ65xJTcK4dCBvZzANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAgyMDIzMDExMjAeFw0yMzAxMTIwODExNTZaFw0yNDAxMTIwODMxNTZaMBMxETAPBgNVBAMMCDIwMjMwMTEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAseKf1weEacJ67D6/...laxQPUbuIL+DaXVkKRm1V3GgIpKTBqMzTf4tCpy7rpUZbhcwAFw6h9A==",
            "displayName": "CN=20230112"
        }
    ]
}

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.

PATCH https://graph.microsoft.com/v1.0/applications/bb77f42f-dacb-4ece-b3e6-285e63c24d52
Content-type: application/json

{
    "keyCredentials": [
        {
            "endDateTime": "2024-01-11T15:31:26Z",
            "startDateTime": "2023-01-12T09:31:26Z",
            "type": "AsymmetricX509Cert",
            "usage": "Verify",
            "key": "base64MIIDADCCAeigAwIBAgIQejfrj3S974xI//npv7hFHTANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAgyMDIzMDExNDAeFw0yMzAxMTIwOTA4NThaFw0yNDAxMTIwOTI4NThaMBMxETAPBgNVBAMMCDIwMjMwMTE0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt5vEj6j1l5wOVHR4eDGe77HWslaIVJ1NqxrXPm/...+R+U7sboj+kUvmFzXI+Ge73Liu8egL2NzOHHpO43calWgq36a9YW1yhBQR1ioEchu6jmudW3rF6ktmVqQ==",
            "displayName": "CN=20230114"
        },
        {
            "customKeyIdentifier": "52ED9B5038A47B9E2E2190715CC238359D4F8F73",
            "type": "AsymmetricX509Cert",
            "usage": "Verify",
            "key": "base64MIIDADCCAeigAwIBAgIQfoIvchhpToxKEPI4iMrU1TANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAgyMDIzMDExMzAeFw0yMzAxMTIwODI3NTJaFw0yNDAxMTIwODQ3NTJaMBMxETAPBgNVBAMMCDIwMjMwMTEzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw+iqg1nMjYmFcFJh/.../S5X6qoEOyJBgtfpSBANWAdA==",
            "displayName": "CN=20230113"
        }
    ]
}

Resposta

HTTP/1.1 204 No Content

Etapa 3: Testar autenticação somente aplicativo

Você pode testar a autenticação somente aplicativo usando o Microsoft Graph PowerShell, conforme mostrado no exemplo a seguir.

Solicitação

## Authenticate using the certificate thumbprint
Connect-MgGraph -ClientID cf34b10f-50fd-4167-acf6-4f08ddd4561b -TenantId 38d49456-54d4-455d-a8d6-c383c71e0a6d -CertificateThumbprint 52ED9B5038A47B9E2E2190715CC238359D4F8F73

## Authenticate using the certificate subject name
Connect-MgGraph -ClientID 588028ea-22c2-490e-8c6b-80cd06985e8c -TenantId 38d49456-54d4-455d-a8d6-c383c71e0a6d -CertificateName CN=20230113

Resposta

Welcome To Microsoft Graph!

Para confirmar se você está executando a sessão do Microsoft Graph PowerShell sem um usuário conectado, execute a solicitação a seguir.

Get-MgContext

A resposta é semelhante à seguinte.



ClientId              : cf34b10f-50fd-4167-acf6-4f08ddd4561b
TenantId              : 38d49456-54d4-455d-a8d6-c383c71e0a6d
CertificateThumbprint :
Scopes                :
AuthType              : AppOnly
AuthProviderType      : ClientCredentialProvider
CertificateName       : CN=20230113
Account               :
AppName               : testApp
ContextScope          : Process
Certificate           :
PSHostVersion         : 5.1.22621.963
ClientTimeout         : 00:05:00


Conclusão

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.