你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

AttestationAdministrationClient.SetPolicy 方法

定义

为指定的 AttestationType设置证明策略。

public virtual Azure.Security.Attestation.AttestationResponse<Azure.Security.Attestation.PolicyModificationResult> SetPolicy (Azure.Security.Attestation.AttestationType attestationType, string policyToSet, Azure.Security.Attestation.AttestationTokenSigningKey signingKey = default, System.Threading.CancellationToken cancellationToken = default);
abstract member SetPolicy : Azure.Security.Attestation.AttestationType * string * Azure.Security.Attestation.AttestationTokenSigningKey * System.Threading.CancellationToken -> Azure.Security.Attestation.AttestationResponse<Azure.Security.Attestation.PolicyModificationResult>
override this.SetPolicy : Azure.Security.Attestation.AttestationType * string * Azure.Security.Attestation.AttestationTokenSigningKey * System.Threading.CancellationToken -> Azure.Security.Attestation.AttestationResponse<Azure.Security.Attestation.PolicyModificationResult>
Public Overridable Function SetPolicy (attestationType As AttestationType, policyToSet As String, Optional signingKey As AttestationTokenSigningKey = Nothing, Optional cancellationToken As CancellationToken = Nothing) As AttestationResponse(Of PolicyModificationResult)

参数

attestationType
AttestationType

AttestationType 应设置其策略的 。

policyToSet
String

指定要设置的证明策略。

signingKey
AttestationTokenSigningKey

如果提供,则指定用于对证明服务的请求进行签名的签名密钥。

cancellationToken
CancellationToken

用于取消此操作的取消令牌。

返回

具有 AttestationResponse<T> 指定证明类型的策略的 。

注解

signingKey如果未提供 参数,则发送到证明服务的策略文档将取消签名。 仅当证明实例在 AAD 模式下运行时,才允许使用未签名的证明策略 - 如果证明实例在独立模式下运行,则必须提供签名密钥和签名证书,以确保 API 的调用方有权更改策略。 字段 Certificate 必须是 API 返回的证书之 GetPolicyManagementCertificates(CancellationToken) 一。

客户端需要能够在证明服务的 enclave 收到策略文档之前验证证明策略文档是否未修改。 [PolicyResult][attestation_policy_result] 中提供了两个属性,可用于验证服务是否收到了策略文档:

若要验证哈希,客户端可以生成证明令牌并验证从该令牌生成的哈希:
// The SetPolicyAsync API will create an AttestationToken signed with the TokenSigningKey to transmit the policy.
// To verify that the policy specified by the caller was received by the service inside the enclave, we
// verify that the hash of the policy document returned from the Attestation Service matches the hash
// of an attestation token created locally.
TokenSigningKey signingKey = new TokenSigningKey(<Customer provided signing key>, <Customer provided certificate>)
var policySetToken = new AttestationToken(
    BinaryData.FromObjectAsJson(new StoredAttestationPolicy { AttestationPolicy = attestationPolicy }),
    signingKey);

using var shaHasher = SHA256Managed.Create();
byte[] attestationPolicyHash = shaHasher.ComputeHash(Encoding.UTF8.GetBytes(policySetToken.Serialize()));

Debug.Assert(attestationPolicyHash.SequenceEqual(setResult.Value.PolicyTokenHash.ToArray()));

如果未提供签名密钥和证书,则 SetPolicyAsync API 将创建包装证明策略的不安全证明令牌。 若要验证 PolicyTokenHash 返回值,开发人员可以创建自己的 AttestationToken 值并创建其哈希。

using var shaHasher = SHA256Managed.Create();
var policySetToken = new UnsecuredAttestationToken(new StoredAttestationPolicy { AttestationPolicy = disallowDebugging });
disallowDebuggingHash = shaHasher.ComputeHash(Encoding.UTF8.GetBytes(policySetToken.Serialize()));

适用于