你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
AttestationAdministrationClient.SetPolicy 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
为指定的 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] 中提供了两个属性,可用于验证服务是否收到了策略文档:
- PolicySigner - 如果 SetPolicy(AttestationType, String, AttestationTokenSigningKey, CancellationToken) 调用包含签名证书,则这是在“SetPolicy”调用时提供的证书。 如果未设置策略签名者,则此值将为 null。
- PolicyTokenHash - 这是发送到服务的 [JSON Web 令牌][json_web_token] 的哈希
// 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()));