如何通过调用 api 设置 Key Vault 机密的到期日期

How to set expiration date on Key Vault secret by calling api

我正在调用 keyvault API 来设置新的秘密,实际上它工作正常,这意味着秘密显示正确,但没有到期日期。

$expiryDate = ((Get-Date).AddMonths(3)).ToFileTimeUtc()
$body =  @{
    "value"       = $KeyValue
    "contentType" = $KeyType
    "exp"         = $expiryDate
} | ConvertTo-Json

$params = @{
    "Uri"     = "https://$($KeyVaultName).vault.azure.net/secrets/$($KeyName)?api-version=7.0"
    "Method"  = "Put"
    "Headers" = @{
        'Authorization' = $Authorization
        "Accept"        = "application/json"
        "Content-Type"  = "application/json"
    }
    "Body" = $body
}

我唯一可能想到的 Documentation 是它想要一个整数,而我不确定 Get-Date returns 是否是一个整数。

在当前的解决方案中,我尝试使用 ToFileTimeUtc 将其转换为整数 在此之前,我只是尝试了 ToUniversalTime 但两者都不起作用。 同样,密钥出现在密钥库中,但似乎未在此处设置到期日期:

最后,我想坚持使用 REST API 调用而不是使用 az Azure CLI。

解决方案:

# UNIX Epoch is January 1st, 1970 at 12:00 AM
$unixEpoch = Get-Date -Date "01/01/1970"
$expiryDate = ((Get-Date).AddMonths(3)).ToUniversalTime()
$unixExpiryDate = (New-TimeSpan -Start $unixEpoch -End 
$expiryDate).TotalSeconds

$attributes = @{
"exp" = $unixExpiryDate
}

$body =  @{     
    "value"       = $KeyValue
    "contentType" = $KeyType
    "attributes"  = $attributes
} | ConvertTo-Json

解决方案包含 2 个部分:

  1. json 构造错误,需要嵌套的“属性”节点

  2. 正如我在问题评论中指出的那样,归功于@Mathias R. Jessen, 它需要一个 UNIX 格式的日期: