نمونه کد برای Chrome Management Certificate Provisioning API

برای مروری بر ویژگی‌های API از Cert Provisioning API دیدن کنید.

تمام درخواست‌های موجود در این صفحه از متغیرهای زیر استفاده می‌کنند:

  • $TOKEN - توکن OAuth2 یا JWT با امضای خود
  • $CUSTOMER - شناسه مشتری یا به معنای واقعی کلمه my_customer
  • $CERT_PROVISIONING_PROCESS - شناسه فرآیند تهیه گواهی که در پیام Pub/Sub اولیه به آداپتور تهیه گواهینامه منتقل شده است.
  • $OPERATION - شناسه عملیات طولانی مدت

فرآیند تهیه گواهی را دریافت کنید

یک منبع CertificateProvisioningProcess دریافت کنید. بسته به وضعیت فرآیند تهیه گواهی، همه فیلدهای منبع CertificateProvisioningProcess در پاسخ پر نمی شوند.

درخواست کنید

curl -H "Authorization: Bearer $TOKEN" \
https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS

پاسخ

پاسخ زیر قبل از درخواست از مشتری برای امضای داده ها ایجاد می شود.

{
  "name": "customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS",
  "provisioningProfileId": "43b413f9-5ecd-4bf6-b431-f2df56ce852e",
  "subjectPublicKeyInfo": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqtbosvGe1JzJJYBPsPzFY33xD9fSJhQLZh21ELD2vEZ5OSzxXzQOhlXZ2Mv4C3m4zn8mjuYykprBxaMggryd8kyhycm2DDsL2/KUkdQNPnv6mBQ8iionF84iabh+FWph1CU63j2vCPnw0VYSv7cz+bHsxs3tXFB7PqqQZr7WcWAAxFaIqoTkJrTGMzDFs8GHUA6mFhMj0WsPzp3aicj24uW0AAJjVFmiZ+pz1lOOL4coNsVrujrX2E6lU8AHjmoQT6ThRVnuo1jFXoASB4A1It6dtu/P8L3zhsVWYRtOZjLLVvGryzT8z0A8iW5k+apkb465jgLd2vuxFPekAgPRDwIDAQAB",
  "chromeOsDevice": {
    "deviceDirectoryApiId": "abcdefgh-ijkl-mnop-qrst-uvwxyz0123456",
    "serialNumber": "0123456789"
  },
  "startTime": "2025-03-07T13:38:54.930621Z",
  "genericCaConnection": {
    "caConnectionAdapterConfigReference": "default_ca_config"
  },
  "genericProfile": {
    "profileAdapterConfigReference": "device_profile"
  }
}

درخواست فرآیند تهیه گواهینامه

یک آداپتور تهیه گواهی ادعای فرآیند تهیه گواهی را دارد. اگر چندین نمونه آداپتور به صورت موازی در حال اجرا باشند، این تضمین می‌کند که فرآیند ارائه گواهی توسط همان نمونه آداپتور مدیریت می‌شود. اگر فقط یک نمونه آداپتور وجود داشته باشد، این مرحله نیز ضروری است.

درخواست کنید

curl -H "Authorization: Bearer $TOKEN" \
--json '{"callerInstanceId": "adapter_instance_1"}' \
https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS:claim

پاسخ

اگر فرآیند ارائه گواهی قبلاً ادعا نشده باشد، یک پاسخ خالی برگردانده می شود.

{}

اگر فرآیند ارائه گواهی قبلاً توسط یک نمونه آداپتور دیگر ادعا شده باشد، درخواست claim با خطای 400 Bad Request ناموفق خواهد بود.

درخواست امضای اثبات مالکیت

از مشتری درخواست کننده گواهی درخواست کنید تا برخی از داده ها را با استفاده از الگوریتم Signature مشخص شده با کلید خصوصی مربوط به کلید عمومی در فرآیند تهیه گواهی امضا کند. $DATA_TO_SIGN نشان دهنده داده های رمزگذاری شده با Base64 است که باید توسط مشتری امضا شود.

درخواست کنید

curl -H "Authorization: Bearer $TOKEN" \
--json '{"signData": "$DATA_TO_SIGN","signatureAlgorithm":"SIGNATURE_ALGORITHM_RSA_PKCS1_V1_5_SHA256"}'\
https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS:signData

پاسخ

پاسخ شامل عملیاتی است که فیلد فوق داده با یک پیام اولیه SignDataMetadata پر شده است.

{
  "name": "customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS/operations/$OPERATION",
  "metadata": {
    "@type": "type.googleapis.com/google.chrome.management.versions.v1.SignDataMetadata",
    "startTime": "2025-03-07T14:44:06.156385Z"
  }
}

دریافت عملیات طولانی مدت

آخرین وضعیت یک عملیات طولانی مدت که از درخواست SignData برگردانده شده است را دریافت کنید.

درخواست کنید

curl -H "Authorization: Bearer $TOKEN" \
https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS/operations/$OPERATION

پاسخ

فیلد metadata یک عملیات با یک پیام اولیه SignDataMetadata پر شده است. در صورت وجود، response یک عملیات با یک پیام پروتو SignDataResponse پر می شود.

در صورتی که عملیات طولانی مدت همچنان ادامه دارد:

{
  "name": "customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS/operations/$OPERATION",
  "metadata": {
    "@type": "type.googleapis.com/google.chrome.management.versions.v1.SignDataMetadata",
    "startTime": "2025-03-07T14:44:06.156385Z"
  }
}

در صورتی که عملیات طولانی مدت با موفقیت به پایان برسد:

{
  "name": "customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS/operations/$OPERATION",
  "metadata": {
    "@type": "type.googleapis.com/google.chrome.management.versions.v1.SignDataMetadata",
    "startTime": "2025-03-07T14:44:06.156385Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.chrome.management.versions.v1.SignDataResponse",
    "certificateProvisioningProcess": {
      "name": "customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS",
      "provisioningProfileId": "43b413f9-5ecd-4bf6-b431-f2df56ce852e",
      "subjectPublicKeyInfo": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqtbosvGe1JzJJYBPsPzFY33xD9fSJhQLZh21ELD2vEZ5OSzxXzQOhlXZ2Mv4C3m4zn8mjuYykprBxaMggryd8kyhycm2DDsL2/KUkdQNPnv6mBQ8iionF84iabh+FWph1CU63j2vCPnw0VYSv7cz+bHsxs3tXFB7PqqQZr7WcWAAxFaIqoTkJrTGMzDFs8GHUA6mFhMj0WsPzp3aicj24uW0AAJjVFmiZ+pz1lOOL4coNsVrujrX2E6lU8AHjmoQT6ThRVnuo1jFXoASB4A1It6dtu/P8L3zhsVWYRtOZjLLVvGryzT8z0A8iW5k+apkb465jgLd2vuxFPekAgPRDwIDAQAB",
      "chromeOsDevice": {
        "deviceDirectoryApiId": "abcdefgh-ijkl-mnop-qrst-uvwxyz0123456",
        "serialNumber": "0123456789"
      },
      "startTime": "2025-03-07T13:38:54.930621Z",
      "signData": "ZGF0YSB0byBzaWduCg==",
      "signatureAlgorithm": "SIGNATURE_ALGORITHM_RSA_PKCS1_V1_5_SHA256",
      "signature": "mPfL8v/DR+ZqbtJ6X5cJCTrzfOO3wPHCY8nV/stbokdNZnkRJ8U0PBzgm6pWy08pMmOfrs9ZMBXcQ0i05Oe6AwgHYYN5RHuwdnhAklJYriDT4fXdzewD6KuA6x7ZX1d2xYnh0p2XczcdNOJsrz2T/p+89PLcB6I1PIg1Cwz4I1YCAS2OMAQF5DxS+SvMpPbkdzkNG4SCCL/hJNayxRMr98SbQ0aQE77AtxzpXGof5cBEBOcbQ+T+kBIgArQ87D6bQVHVB3di+TvYepK6hwxiLbhCEDGHgi2DfMp8kEWnAVPVzi6xht5jPNhVqILALRbQQ1nUjlP8UO+/y+WR4M36Yg==",
      "genericCaConnection": {
        "caConnectionAdapterConfigReference": "default_ca_config"
      },
      "genericProfile": {
        "profileAdapterConfigReference": "device_profile"
      }
    }
  }
}

در صورتی که عملیات طولانی مدت شکست خورده باشد:

{
  "name": "customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS/operations/$OPERATION",
  "metadata": {
    "@type": "type.googleapis.com/google.chrome.management.versions.v1.SignDataMetadata",
    "startTime": "2025-03-07T14:44:06.156385Z"
  },
  "done": true,
  "error": {
    "code": 3,
    "message": "The requested SignData LRO failed because the corresponding certificate provisioning process is in failure state CERTIFICATE_PROVISIONING_RESULT_ERROR_INVALID_SIGNATURE with the following error message: The proof of possession signature is invalid. [operationId=$OPERATION, cppId=$CERT_PROVISIONING_PROCESS, customerId=$CUSTOMER]"
  }
}

یک گواهی بارگذاری کنید

گواهی X.509 را در قالب PEM بارگذاری کنید. در درخواست نمونه گواهی رمزگذاری شده با PEM با متغیر $CERTIFICATE_IN_PEM_FORMAT نشان داده می شود.

درخواست کنید

curl -H "Authorization: Bearer $TOKEN" \
--json '{"certificatePem": "$CERTIFICATE_IN_PEM_FORMAT"}' \
https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS:uploadCertificate

پاسخ

{}

گزارش شکست برای یک فرآیند تهیه گواهی

یک فرآیند ارائه گواهی را به عنوان ناموفق علامت گذاری کنید و یک پیام خطای مناسب تنظیم کنید. پیام خطا به سرویس گیرنده ChromeOS که فرآیند ارائه گواهی را آغاز کرده است منتشر می شود.

درخواست کنید

curl -H "Authorization: Bearer $TOKEN" \
--json '{"errorMessage": "The CA could not issue the certificate."}' \
https://chromemanagement.googleapis.com/v1/customers/$CUSTOMER/certificateProvisioningProcesses/$CERT_PROVISIONING_PROCESS:setFailure

پاسخ

{}