问题描述
我正在通过 REST apis 对 azure DPS 进行操作。我能够通过 REST API 在“创建新的个人注册”中成功发布新条款。使用的 URL 是“https://name.azure-devices-provisioning.net/enrollments/registrationId?api-version= 2019-03-31";.我当前的任务是更新 DPS 中个人注册的证书。我正在提取证书的正文并将其附加到请求正文并执行 PUT 操作。但是我收到一条错误消息,提示“注册已经存在,但具有不同的证书信息”。我提供内容类型和授权 sas 令牌作为标头。在请求正文中,我正在传递 eTag。我想我已经清除了更新操作的所有先决条件。请帮助我了解我是否在这里做错了。提前致谢!
解决方法
要更新 DPS 中的个人注册,您还必须在请求标头中添加 etag 值。其标头属性名称为 If-Match
。有关详细信息,请参阅 https://docs.microsoft.com/en-us/rest/api/iot-dps/createorupdateindividualenrollment/createorupdateindividualenrollment#request-headers
我们可以逐步开始,在此过程中,我已使用 Azure DPS via REST API call 成功更新了我的 x509 证书。希望这对您的查询有所帮助。
步骤 1: 使用 x509 证书创建个人注册,以 base64 格式传递它。请记下响应中的“eTag”值。
在 Azure DPS 门户中验证。我看到指纹与我的 x509 证书相符。
第 2 步:现在是使用新证书更新现有注册的时候了。使用 base64 格式。使用请求头中的“If-Match”,值为上一步获取/复制的“eTag”。
下图显示了带有“If-match =eTag”的请求标头,用于更新现有实体。
最后,我们可以看到响应是更新操作成功。
在 Azure DPS 门户中验证。我看到指纹与我的新 x509 证书匹配。
示例请求正文,以防万一,如果对任何人有用。
{
"attestation": {
"type": "x509","X509": {
"clientCertificates": {
"primary":{
"certificate":"base64 string of your cert"
}
}
}
},"registrationId":"testenrollment10","capabilities":{"iotEdge":false},"provisioningStatus": "enabled"
}
如果您在此问题上需要进一步帮助,请在下方对此回复发表评论。