Adicionar um certificado a uma aplicação com o Microsoft Graph

O plataforma de identidade da Microsoft suporta três tipos de credenciais para autenticar aplicações e principais de serviço: palavras-passe (segredos da aplicação), certificados e credenciais de identidade federada. Se não conseguir utilizar credenciais de identidade federada para a sua aplicação, recomendamos vivamente que utilize certificados em vez de segredos.

Pode adicionar ou remover certificados com o centro de administração do Microsoft Entra. No entanto, poderá ter de automatizar a adição das credenciais de certificado para a sua aplicação ou principal de serviço.

Este artigo fornece orientações para utilizar scripts do Microsoft Graph e do PowerShell para atualizar credenciais de certificado programaticamente para um registo de aplicações.

Pré-requisitos

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

  • Um inquilino Microsoft Entra ativo.
  • Um cliente de API, como o Graph Explorer. Inicie sessão como um utilizador com permissão para criar e gerir aplicações no inquilino. O Programador de Aplicações (de uma aplicação da qual é proprietário) e a função administrador de aplicações são as funções com menos privilégios que podem efetuar esta operação.
  • Um certificado assinado a utilizar para autenticar a aplicação. Este artigo utiliza um certificado autoassinado para fins de demonstração. Para gerar um, veja Criar um certificado público autoassinado para autenticar a sua aplicação.

Cuidado

A utilização de certificados é altamente recomendada em segredos; no entanto, não recomendamos a utilização de certificados autoassinados. Podem reduzir a barra de segurança da sua aplicação devido a vários fatores, como a utilização de conjuntos de hash e cifras desatualizados ou a falta de validação. Recomendamos a aquisição de certificados de uma autoridade de certificação fidedigna bem conhecida.

Passo 1: ler os detalhes do certificado

Para adicionar um certificado através de programação com o Microsoft Graph, precisa da chave do certificado. Opcionalmente, pode adicionar o thumbprint do certificado.

[Opcional] Obter o thumbprint do certificado

É opcional adicionar o thumbprint do certificado ao payload do pedido. Se quiser adicionar o thumbprint, pode executar o seguinte pedido do PowerShell para ler o thumbprint do certificado. Este pedido pressupõe que 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

O resultado no ficheiro .txt pode ser semelhante ao seguinte.

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

Obter a chave de certificado

Para ler a chave do certificado e guardá-la num ficheiro .txt com o PowerShell, execute o seguinte pedido.

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

O resultado no ficheiro .txt pode ser semelhante ao seguinte.

Nota: A chave aqui apresentada foi abreviada para legibilidade.

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

Passo 2: adicionar os detalhes do certificado com o Microsoft Graph

Solicitação

O pedido seguinte adiciona os detalhes do certificado a uma aplicação. As definições são as seguintes:

  • StartDateTime é a data em que ou após a criação do certificado.
  • O endDateTime pode ser um máximo de 1 ano a partir de startDateTime. Se não for especificado, o sistema atribuirá automaticamente uma data 1 ano após startDateTime.
  • O tipo e a utilização têm de ser AsymmetricX509Cert e Verify respetivamente.
  • Atribua o nome do requerente do certificado à propriedade displayName .
  • A chave é o valor codificado Base64 que gerou no passo anterior. O thumbprint está incluído na chave codificada e adicionar a chave também adiciona o thumbprint.

Observação

Se a sua aplicação tiver um certificado válido existente que pretende continuar a utilizar para autenticação, inclua os detalhes do certificado atual e novo no objeto keyCredentials da aplicação. Uma vez que se trata de 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 seguinte adiciona um novo certificado e substitui os certificados existentes.

Nota: A chave aqui apresentada 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 seguinte adiciona um novo certificado sem substituir o certificado existente pelo thumbprint 52ED9B5038A47B9E2E2190715CC238359D4F8F73.

Nota: A chave aqui apresentada 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

Passo 3: Testar a autenticação apenas da aplicação

Pode testar a autenticação apenas de aplicação com o Microsoft Graph PowerShell, conforme mostrado no exemplo seguinte.

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 está a executar a sessão do PowerShell do Microsoft Graph sem um utilizador com sessão iniciada, execute o seguinte pedido.

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

Utilizou o Microsoft Graph para atualizar as credenciais de certificado para um objeto de aplicação. Este processo é uma alternativa programática à utilização do centro de administração do Microsoft Entra. Também pode atualizar as credenciais de certificado para um principal de serviço ao seguir um processo semelhante e chamar o https://graph.microsoft.com/v1.0/servicePrincipals/ ponto final.