Adición de un certificado a una aplicación mediante Microsoft Graph

Microsoft Entra ID admite tres tipos de credenciales para autenticar aplicaciones y entidades de servicio: contraseñas (secretos de aplicación), certificados y credenciales de identidad federada. Si no puede usar credenciales de identidad federada para la aplicación, se recomienda encarecidamente usar certificados en lugar de secretos.

Puede agregar o quitar certificados mediante el Centro de administración Microsoft Entra. Sin embargo, en escenarios de automatización, es posible que tenga que automatizar la sustitución de certificados para la aplicación o la entidad de servicio.

En este artículo se proporcionan instrucciones para usar scripts de Microsoft Graph y PowerShell para actualizar las credenciales de certificado mediante programación para un registro de aplicaciones.

Requisitos previos

Para completar este tutorial, necesita los siguientes recursos y privilegios:

  • Un inquilino de Microsoft Entra activo.
  • Un cliente de API como Graph Explorer. Inicie sesión como usuario con un rol de administrador de aplicaciones o un usuario con permiso para crear y administrar aplicaciones en el inquilino.
  • Certificado firmado que usará para autenticar la aplicación. En este artículo se usa un certificado autofirmado con fines de demostración. Para obtener información sobre cómo crear un certificado autofirmado, consulte Creación de un certificado público autofirmado para autenticar la aplicación.

Precaución

El uso de certificados es muy recomendable sobre los secretos; sin embargo, no se recomienda usar certificados autofirmados. Pueden reducir la barra de seguridad de la aplicación debido a diversos factores, como el uso de un hash y conjuntos de cifrado obsoletos o la falta de validación. Se recomienda adquirir certificados de una entidad de certificación de confianza conocida.

Paso 1: Leer los detalles del certificado

Para agregar un certificado mediante programación mediante Microsoft Graph, necesita la clave del certificado. Opcionalmente, puede agregar la huella digital del certificado.

[Opcional] Obtención de la huella digital del certificado

Es opcional agregar la huella digital del certificado a la carga de la solicitud. Si desea agregar la huella digital, puede ejecutar la siguiente solicitud de PowerShell para leer la huella digital del certificado. En esta solicitud se supone que ha generado y exportado el certificado a la unidad local.

Solicitud

## 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"

Respuesta

La salida que se guarda en el archivo .txt puede ser similar a la siguiente.

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

Obtención de la clave de certificado

Para leer la clave del certificado mediante PowerShell, ejecute la siguiente solicitud.

Solicitud

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"

Respuesta

La salida que se guarda en el archivo .txt puede ser similar a la siguiente.

Nota: La clave que se muestra aquí se ha acortado para mejorar la legibilidad.

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

Paso 2: Agregar los detalles del certificado mediante Microsoft Graph

Solicitud

La siguiente solicitud agrega los detalles del certificado a una aplicación. La configuración es la siguiente:

  • StartDateTime es la fecha en que o después de crear el certificado.
  • EndDateTime puede ser un máximo de 1 año desde startDateTime. Si no se especifica, el sistema asignará automáticamente una fecha 1 año después de startDateTime.
  • El tipo y el uso deben ser AsymmetricX509Cert y Verify respectivamente.
  • Asigne el nombre del firmante del certificado a la propiedad displayName .
  • La clave es el valor codificado en Base64 que generó en el paso anterior.

Nota:

Si la aplicación tiene un certificado válido existente que desea seguir usando para la autenticación, incluya los detalles del certificado actual y el nuevo en el objeto keyCredentials de la aplicación. Dado que se trata de una llamada PATCH, que por protocolo reemplaza el contenido de la propiedad por los nuevos valores, incluido solo el nuevo certificado reemplazará los certificados existentes por el nuevo.

En el ejemplo siguiente se agrega un nuevo certificado y se reemplazan los certificados existentes.

Nota: La clave que se muestra aquí se ha acortado para mejorar la legibilidad.

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"
        }
    ]
}

En el ejemplo siguiente se agrega un nuevo certificado sin reemplazar el certificado existente identificado por la huella digital 52ED9B5038A47B9E2E2190715CC238359D4F8F73.

Nota: La clave que se muestra aquí se ha acortado para mejorar la legibilidad.

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"
        }
    ]
}

Respuesta

HTTP/1.1 204 No Content

Paso 3: Prueba de la autenticación solo de la aplicación

Puede probar la autenticación de solo aplicación mediante Microsoft Graph PowerShell, como se muestra en el ejemplo siguiente.

Solicitud

## 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

Respuesta

Welcome To Microsoft Graph!

Para confirmar que está ejecutando la sesión de PowerShell de Microsoft Graph sin que un usuario haya iniciado sesión, ejecute la siguiente solicitud.

Get-MgContext

La respuesta es similar a la siguiente.



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


Conclusión

Ha usado Microsoft Graph para actualizar las credenciales de certificado de un objeto de aplicación. Este proceso es una alternativa mediante programación al uso de la Centro de administración Microsoft Entra. También puede actualizar las credenciales de certificado de una entidad de servicio siguiendo un proceso similar y llamando al punto de https://graph.microsoft.com/v1.0/servicePrincipals/ conexión.