如何通过调用 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 个部分:
json 构造错误,需要嵌套的“属性”节点
正如我在问题评论中指出的那样,归功于@Mathias R. Jessen,
它需要一个 UNIX 格式的日期:
我正在调用 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 个部分:
json 构造错误,需要嵌套的“属性”节点
正如我在问题评论中指出的那样,归功于@Mathias R. Jessen, 它需要一个 UNIX 格式的日期: