Поделиться через


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

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

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

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

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

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

  • Активный клиент Microsoft Entra.
  • Клиент API, например Graph Обозреватель. Войдите как пользователь, которому разрешено создавать приложения в клиенте и управлять ими. Роль "Разработчик приложений" (приложения, которым они владеют) и "Администратор приложения", являются наименее привилегированными ролями, которые могут выполнять эту операцию.
  • Подписанный сертификат, используемый для проверки подлинности приложения. В этой статье для демонстрации используется самозаверяющий сертификат. Чтобы создать его, см . статью Создание самозаверяющего общедоступного сертификата для проверки подлинности приложения.

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

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

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

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

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

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

Запрос

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

Отклик

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

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

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

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

Запрос

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"

Отклик

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

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

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

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

Запрос

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

  • StartDateTime — это дата создания или после создания сертификата.
  • Значение endDateTime может быть не более 1 года с момента startDateTime. Если это не указано, система автоматически назначит дату через 1 год после 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 для обновления учетных данных сертификата для объекта приложения. Этот процесс является программной альтернативой использованию Центр администрирования Microsoft Entra. Вы также можете обновить учетные данные сертификата для субъекта-службы, выполнив аналогичный процесс и вызвав конечную точку https://graph.microsoft.com/v1.0/servicePrincipals/ .