Adicionar um certificado a um aplicativo usando o Microsoft Graph

A plataforma de identidade da Microsoft dá suporte a três tipos de credenciais para autenticar aplicativos e entidades de serviço: senhas (segredos de aplicativo), certificados e credenciais de identidade federada. Se você não puder usar credenciais de identidade federada para seu aplicativo, use certificados em vez de segredos.

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

Este artigo fornece diretrizes para usar os scripts do Microsoft Graph e do PowerShell para atualizar as credenciais de certificado programaticamente para um registro de aplicativo.

Pré-requisitos

Para concluir este tutorial, você precisa dos seguintes recursos e privilégios:

  • Um locatário ativo do Microsoft Entra.
  • Um cliente de API, como o Graph Explorer. Entre como um usuário que tem permissão para criar e gerenciar aplicativos no locatário. As funções de Desenvolvedor de Aplicativos (de um aplicativo que eles possuem) e Administrador de Aplicativos são as funções menos privilegiadas que podem executar essa operação.
  • Um certificado assinado a ser usado para autenticar o aplicativo. Este artigo usa um certificado autoassinado para fins de demonstração. Para gerar um, consulte Criar um certificado público autoassinado para autenticar seu aplicativo.

Cuidado

Usar certificados em vez de segredos; No entanto, não use certificados autoassinados. Eles podem reduzir a segurança do seu aplicativo devido a vários fatores, como o uso de um hash desatualizado e conjuntos de criptografia ou falta de validação. Obtenha certificados de uma autoridade de certificação confiável 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

Opcionalmente, você pode adicionar a impressão digital do certificado ao conteúdo da solicitação. Para adicionar a impressão digital, execute a seguinte solicitação do PowerShell para ler a impressão digital do certificado. Essa solicitação pressupõe que você gerou e exportou o certificado para a unidade local.

Solicitação

## Replace the file path with the source of your certificate and output path with the location where you want to save the thumprint details

Get-PfxCertificate -Filepath "C:\Users\admin\Desktop\20230112.cer" | Out-File -FilePath "C:\Users\admin\Desktop\20230112.cer.thumbprint.txt"

Resposta

A saída no arquivo .txt pode ser semelhante ao exemplo a seguir.

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

Obter a chave de certificado

Para ler a chave do certificado e salvá-la em um arquivo .txt usando o PowerShell, execute a seguinte solicitação.

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 no arquivo .txt pode ser semelhante ao exemplo a seguir.

Observação: A chave mostrada aqui é encurtada para facilitar a 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 depois o certificado foi criado.
  • O endDateTime pode ser no máximo um ano a partir do startDateTime. Se você não especificá-la, o sistema atribuirá automaticamente uma data um ano após a startDateTime.
  • O tipo e o uso devem ser AsymmetricX509Cert e Verify, respectivamente.
  • Atribua o nome da entidade do certificado à propriedade displayName .
  • A chave é o valor codificado em Base64 gerado na etapa anterior. A impressão digital está incluída na chave codificada. Adicionar a chave também adiciona a impressão digital.

Observação

Se o seu aplicativo tiver um certificado válido existente que você deseja continuar usando para autenticação, inclua os detalhes do certificado atual e do novo 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 substitui os certificados existentes pelo novo.

O exemplo a seguir adiciona um novo certificado e substitui todos os certificados existentes.

Observação: A chave mostrada aqui é encurtada para facilitar a 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 por impressão digital 52ED9B5038A47B9E2E2190715CC238359D4F8F73.

Observação: A chave mostrada aqui é encurtada para facilitar a 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 a autenticação somente do aplicativo

Você pode testar a autenticação somente de aplicativo com 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 que você está executando a sessão do Microsoft Graph PowerShell sem um usuário conectado, execute a seguinte solicitação.

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 as 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.