Microsoft Graph を使用してアプリに証明書を追加する

Microsoft Entra IDでは、アプリとサービス プリンシパルを認証するための 3 種類の資格情報 (パスワード (アプリ シークレット)、証明書フェデレーション ID 資格情報がサポートされています。 アプリにフェデレーション ID 資格情報を使用できない場合は、シークレットではなく証明書を使用することを強くお勧めします。

Microsoft Entra 管理センターを使用して証明書を追加または削除できます。 ただし、自動化シナリオでは、アプリまたはサービス プリンシパルの証明書ロールオーバーを自動化する必要がある場合があります。

この記事では、Microsoft Graph スクリプトと PowerShell スクリプトを使用して、アプリの登録のためにプログラムで証明書の資格情報を更新するためのガイダンスを提供します。

前提条件

このチュートリアルを完了するには、次のリソースと特権が必要です。

  • アクティブなMicrosoft Entra テナント。
  • Graph エクスプローラーなどの API クライアント。 アプリケーション管理者ロールのユーザー、またはテナントでアプリケーションの作成と管理を許可されているユーザーとしてサインインします。
  • アプリの認証に使用する署名付き証明書。 この記事では、デモンストレーション目的で自己署名証明書を使用します。 自己署名証明書を作成する方法については、「自己署名 パブリック証明書を作成してアプリケーションを認証する」を参照してください。

注意

証明書の使用は、シークレットよりも強くお勧めします。ただし、自己署名証明書の使用はお勧めしません。 古いハッシュと暗号スイートの使用や検証の欠如など、さまざまな要因により、アプリケーションのセキュリティ バーを減らすことができます。 既知の信頼できる証明機関から証明書を調達することをお勧めします。

手順 1: 証明書の詳細を読み取る

Microsoft Graph を使用してプログラムで証明書を追加するには、証明書のキーが必要です。 必要に応じて、証明書の拇印を追加できます。

[省略可能]証明書の拇印を取得する

要求ペイロードに証明書の拇印を追加することは省略可能です。 拇印を追加する場合は、次の PowerShell 要求を実行して、証明書の拇印を読み取ることができます。 この要求では、証明書を生成してローカル ドライブにエクスポートしたことを前提としています。

要求

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

応答

.txt ファイルに保存される出力は、次のようになります。

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

証明書キーを取得する

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 は、startDateTime から最大 1 年にすることができます。 指定されていない場合、 システムは startDateTime の 1 年後に自動的に日付を割り当てます。
  • 使用法はそれぞれ であるAsymmetricX509CertVerify必要があります。
  • 証明書のサブジェクト名を 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/ 更新することもできます。