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


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