Добавление сертификата в приложение с помощью Microsoft Graph

Azure Active Directory (Azure AD) поддерживает три типа учетных данных для проверки подлинности приложений и субъектов-служб: пароли (секреты приложений), сертификаты и учетные данные федеративного удостоверения. Если вы не можете использовать учетные данные федеративного удостоверения для приложения, настоятельно рекомендуется использовать сертификаты вместо секретов.

Вы можете добавлять или удалять сертификаты с помощью портал Azure. Однако в сценариях автоматизации может потребоваться автоматизировать перенос сертификата для приложения или субъекта-службы.

В этой статье содержатся рекомендации по использованию сценариев Microsoft Graph и PowerShell для программного обновления учетных данных сертификата для регистрации приложения.

Предварительные требования

Для работы с этим руководством вам потребуются следующие ресурсы и привилегии:

Предостережение

Настоятельно рекомендуется использовать сертификаты вместо секретов; Однако мы не рекомендуем использовать самозаверяемые сертификаты. Они могут снизить уровень безопасности приложения из-за различных факторов, таких как использование устаревших наборов хэша и шифров или отсутствие проверки. Рекомендуется приобретать сертификаты из хорошо известного доверенного центра сертификации.

Шаг 1. Чтение сведений о сертификате

Чтобы добавить сертификат программным способом с помощью Microsoft Graph, вам потребуется ключ сертификата. При необходимости можно добавить отпечаток сертификата.

[Необязательно] Получение отпечатка сертификата

Необязательно добавить отпечаток сертификата в полезные данные запроса. Если вы хотите добавить отпечаток, можно выполнить следующий запрос PowerShell, чтобы прочитать отпечаток сертификата. Этот запрос предполагает, что вы создали и экспортировали сертификат на локальный диск.

Запрос

Get-PfxCertificate -Filepath "C:\Users\admin\Desktop\20230112.cer" | Out-File -FilePath "C:\Users\admin\Desktop\20230112.cer.thumbprint.txt" ## Replace the file path with the source of your certificate

Отклик

Выходные данные, сохраненные в файле.txt , могут выглядеть следующим образом.

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

Получение ключа сертификата

Чтобы прочитать ключ сертификата с помощью PowerShell, выполните следующий запрос.

Запрос

[convert]::ToBase64String((Get-Content C:\Users\admin\Desktop\20230112.cer -Encoding byte))  | Out-File -FilePath "C:\Users\admin\Desktop\20230112.key.txt" ## Replace the file path with the location of your certificate

Отклик

Выходные данные, сохраненные в файле.txt , могут выглядеть следующим образом.

Примечание: Показанный здесь ключ был сокращен для удобства чтения.

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

Шаг 2. Добавление сведений о сертификате с помощью Microsoft Graph

Запрос

Следующий запрос добавляет сведения о сертификате в приложение. Ниже приведены параметры.

  • StartDateTime — это дата создания или после создания сертификата.
  • Значение endDateTime может быть не более одного года с момента началаDateTime. Если это не указано, система автоматически назначит дату через год после startDateTime.
  • Тип и использование должны быть AsymmetricX509Cert и Verify соответственно.
  • Назначьте имя субъекта сертификата свойству displayName .
  • Ключ — это значение в кодировке Base64, созданное на предыдущем шаге.

Примечание.

Если в вашем приложении есть действительный сертификат, который вы хотите продолжать использовать для проверки подлинности, добавьте сведения о текущем и новом сертификате в объект keyCredentials приложения. Так как это вызов PATCH, который по протоколу заменяет содержимое свойства новыми значениями, включая только новый сертификат, заменит существующие сертификаты новым.

В следующем примере добавляется новый сертификат и заменяются все существующие сертификаты.

Примечание: Показанный здесь ключ был сокращен для удобства чтения.

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

В следующем примере добавляется новый сертификат, не заменяя существующий сертификат, идентифицируемый отпечатком 52ED9B5038A47B9E2E2190715CC238359D4F8F73.

Примечание: Показанный здесь ключ был сокращен для удобства чтения.

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

Отклик

HTTP/1.1 204 No Content

Шаг 3. Проверка проверки подлинности только для приложений

Проверку подлинности только для приложений можно протестировать с помощью Microsoft Graph PowerShell, как показано в следующем примере.

Запрос

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

Отклик

Welcome To Microsoft Graph!

Чтобы убедиться, что вы используете сеанс Microsoft Graph PowerShell без вошедшего пользователя, выполните следующий запрос.

Get-MgContext

Ответ аналогичен следующему.



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


Заключение

Вы использовали Microsoft Graph для обновления учетных данных сертификата для объекта приложения. Этот процесс является программной альтернативой использованию портал Azure. Вы также можете обновить учетные данные сертификата для субъекта-службы, выполнив аналогичный процесс и вызвав конечную точку https://graph.microsoft.com/v1.0/servicePrincipals/ .