代码之家  ›  专栏  ›  技术社区  ›  Bill Software Engineer

通过REST使用服务对服务访问令牌访问Azure Key Vault

  •  0
  • Bill Software Engineer  · 技术社区  · 7 年前

    我无法获得使用我的应用程序(而不是通过用户登录)访问Azure Key Vault的足够权限。以下是我的设置:

    我有azure key vault设置: Key Vault Setup

    我已经给了我名为“KeyVault”的应用程序所有权限。

    我的应用程序已在Azure Active Directory中注册。我已经授予它访问密钥库的权限:

    App registered with Azure Active Directory App given permission to access Key Vault

    在此之后,我尝试使用以下REST API获取访问令牌:

    https://login.microsoftonline.com/<DOMAIN_ID>/oauth2/token
    

    client\u id和resource都是我在前面显示的Active Directory中注册的应用程序的应用程序id。(是否正确?)

    enter image description here

    我确实得到了一个访问令牌,我用它来尝试查询我保险库中的一个秘密。不幸的是,正如您所看到的,它返回了一个401错误,这是没有权限的。我做错了什么?

    Querying the key vault

    URL来自密钥库中密钥的“机密标识符”。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Shui shengbao    7 年前

    client\u id和resource都是我在中注册的应用的应用id 我之前显示的Active Directory。

    不,资源id不是应用id。正如Rich所说,值是 https://vault.azure.net .

    我在实验室用Power Shell进行了测试,代码如下:

    $TENANTID=""
    $APPID=""
    $PASSWORD=""
    $result=Invoke-RestMethod -Uri https://login.microsoftonline.com/$TENANTID/oauth2/token?api-version=1.0 -Method Post -Body @{"grant_type" = "client_credentials"; "resource" = "https://vault.azure.net"; "client_id" = "$APPID"; "client_secret" = "$PASSWORD" }
    $token=$result.access_token
    
    $url="https://shui.vault.azure.net/secrets/shui01/cea20d376aee4d25a2d714df19314c26?api-version=2016-10-01"
    
    $Headers=@{
        'authorization'="Bearer $token"
    
    }
    
    Invoke-RestMethod  -Uri $url  -Headers $Headers -Method GET
    

    注意:如果您想获取API输入信息,可以使用Azure Power Shell -debug 为了得到它。例如:

    enter image description here

        2
  •  1
  •   Rich Randall    7 年前

    从AAD请求令牌时,应将资源设置为:

    https://vault.azure.net

    这将确保返回的令牌“寻址”到密钥保管库。