如何使用Azure应用程序配置REST API

如何使用Azure应用程序配置REST API,azure,azure-rest-api,Azure,Azure Rest Api,试图找出如何使用Azure AppConfiguration REST API来检索和创建键值。到目前为止,我发现了两个信息来源:和 这两个来源如何相互对应?它们显然描述了一些不同的AppConfigRESTAPI 我设法使用这种类型的URI和AAD授权从AppConfig存储中检索值 https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/M

试图找出如何使用Azure AppConfiguration REST API来检索和创建键值。到目前为止,我发现了两个信息来源:和

这两个来源如何相互对应?它们显然描述了一些不同的AppConfigRESTAPI

我设法使用这种类型的URI和AAD授权从AppConfig存储中检索值 https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.AppConfiguration/configurationStores/{configStoreName}/listKeyValue?api version=2019-10-01,但它只允许获取一个特定密钥的一个值

另一种方法使用基于AppConfig端点{StoreName}.azconfig.io/kv/…的URI。。。而且必须有更灵活的方法来检索数据。但我不能让它工作。我试着跟着。我尝试使用AAD令牌向这个URI发出请求,就像我对第一种类型的API所做的那样。在这两种情况下,我得到401身份验证错误。 有人能分享一些详细的工作示例吗?任何帮助都将不胜感激。

https://management.azure.com/ 是Azure资源管理API,而azconfig.io是应用程序配置自己的API


我认为你应该使用应用程序配置自己的API。但是,相同的Azure AD令牌将不适用于此API。您需要使用资源请求另一个访问令牌=https://yourstorename.azconfig.io 或范围=https://yourstorename.azconfig.io/.default,这取决于您是使用Azure AD的v1还是v2令牌端点。

使用脚本中的$headers来验证api调用:

function Sign-Request(
    [string] $hostname,
    [string] $method,      # GET, PUT, POST, DELETE
    [string] $url,         # path+query
    [string] $body,        # request body
    [string] $credential,  # access key id
    [string] $secret       # access key value (base64 encoded)
)
{  
    $verb = $method.ToUpperInvariant()
    $utcNow = (Get-Date).ToUniversalTime().ToString("R", [Globalization.DateTimeFormatInfo]::InvariantInfo)
    $contentHash = Compute-SHA256Hash $body

    $signedHeaders = "x-ms-date;host;x-ms-content-sha256";  # Semicolon separated header names

    $stringToSign = $verb + "`n" +
                    $url + "`n" +
                    $utcNow + ";" + $hostname + ";" + $contentHash  # Semicolon separated signedHeaders values

    $signature = Compute-HMACSHA256Hash $secret $stringToSign
 
    # Return request headers
    return @{
        "x-ms-date" = $utcNow;
        "x-ms-content-sha256" = $contentHash;
        "Authorization" = "HMAC-SHA256 Credential=" + $credential + "&SignedHeaders=" + $signedHeaders + "&Signature=" + $signature
    }
}

function Compute-SHA256Hash(
    [string] $content
)
{
    $sha256 = [System.Security.Cryptography.SHA256]::Create()
    try {
        return [Convert]::ToBase64String($sha256.ComputeHash([Text.Encoding]::ASCII.GetBytes($content)))
    }
    finally {
        $sha256.Dispose()
    }
}

function Compute-HMACSHA256Hash(
    [string] $secret,      # base64 encoded
    [string] $content
)
{
    $hmac = [System.Security.Cryptography.HMACSHA256]::new([Convert]::FromBase64String($secret))
    try {
        return [Convert]::ToBase64String($hmac.ComputeHash([Text.Encoding]::ASCII.GetBytes($content)))
    }
    finally {
        $hmac.Dispose()
    }
}

# Stop if any error occurs
$ErrorActionPreference = "Stop"

$uri = [System.Uri]::new("https://{myconfig}.azconfig.io/kv?api-version=1.0")
$method = "GET"
$body = $null
$credential = "<Credential>"
$secret = "<Secret>"

$headers = Sign-Request $uri.Authority $method $uri.PathAndQuery $body $credential $secret

沙司:

谢谢你,@juunas!一个简短的回答,一切都安排妥当了。我希望微软的文档是那么清晰