【问题标题】:How do you get a token for an azure managed identity via REST interface?如何通过 REST 接口获取 Azure 托管标识的令牌?
【发布时间】:2019-03-11 15:27:06
【问题描述】:

本题参考文章:

https://docs.microsoft.com/en-us/azure/app-service/app-service-managed-service-identity

我试图弄清楚如何使用为我的天蓝色应用程序生成的服务主体进行模拟以在本地工作。

我关注了这篇文章,当我将 azure 函数部署到 azure 并从那里运行它时,我能够成功使用 MSI_ENDPOINT 和 MSI_SECRET 成功获取令牌。但是,当我在本地运行相同的部署时,它会失败。我使用完全相同的 MSI_SECRET 并将 MSI_ENDPOINT 更改为我用于 Azure 函数端点的域。

示例:在 Azure 上,MSI_ENDPOINT = http://127.0.0.1:41831 本地为 http://localhost:7071 (http://0.0.0.0:7071

但是,当我在本地运行它时,我收到一个 404 错误的请求。请求是http://0.0.0.0:7071/MSI/token?resource=https://vault.azure.net&api-version=2017-09-01,标头中有秘密。除了 MSI_ENDPOINT 之外,与在 azure 上加载的工作参数完全相同。

关于如何解决这个问题以便我可以在本地运行和测试的任何建议?

使用适用于 .NET 的 Microsoft.Azure.Services.AppAuthentication 库 对于 .NET 应用程序和功能,使用 托管标识是通过 Microsoft.Azure.Services.AppAuthentication 包。这个图书馆将 还允许您在开发机器上本地测试代码, 在 Visual Studio、Azure CLI 或 Active 中使用您的用户帐户 目录集成身份验证。有关本地发展的更多信息 此库的选项,请参阅 Microsoft.Azure.Services.AppAuthentication 参考。这个部分 向您展示如何开始使用代码中的库。 将 Microsoft.Azure.Services.AppAuthentication 和 Microsoft.Azure.KeyVault NuGet 包的引用添加到您的应用程序。

但是,这个库仅在我没有使用的 .net 中可用,并且没有真正解释您将如何通过 REST 调用来实现它。

谢谢!

【问题讨论】:

    标签: azure azure-management service-principal


    【解决方案1】:

    据我了解,通过 REST 的 MSI 适用于您在云端,但不适用于本地。

    不幸的是,当您无法使用 AppAuthentication 库时,目前这似乎不太容易。见this GitHub suggestion

    因此,如果您不想将一些调试代码破解到您的生产代码中,您可能需要在本地托管一个“自定义 MSI 代理”,它只通过 client credentials (appId + secret) 执行经典身份验证以返回令牌。

    curl -d "grant_type=client_credentials&client_id=<removed_for_security>&client_secret=<removed_for_security>&resource=https%3A%2F%2Fvault.azure.net" https://login.microsoftonline.com/<removed_for_security>/oauth2/token
    

    请注意,我将 KeyVault 添加为资源参数。查看您构建的 MSI URL - http://0.0.0.0:7071/MSI/token?resource=https://vault.azure.net&amp;api-version=2017-09-01

    【讨论】:

    • 感谢 Alex,但是,在这种情况下,我使用的是 azure 函数。 client_id 甚至 app id 是什么,因为我正在使用消费计划并且它附加到任何应用程序。
    • 它应该是你的服务主体的ID(guid)。
    • 使用 azure 函数,我能够获取服务主体的唯一方法是打印出 MSI_SECRET,因为启用它的方式是在 azure 函数设置中切换一个切换按钮。但是,既然这是系统定义的,它会改变吗?以这种方式抓住钥匙感觉不准确。有关如何正确获取 Azure 功能的服务主体机密的任何建议?
    • 我在尝试时收到以下错误:在目录 中找不到标识符为 的应用程序。如果租户管理员未安装应用程序或未获得租户中任何用户的同意,则可能会发生这种情况。在这种情况下,我从 azure 函数属性 -> 平台功能 -> 资源浏览器中获取了tenantId 和 principalId,其中有一个名为“identity”的部分(类型、tenandid、principalId)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 2022-10-20
    • 2021-04-07
    相关资源
    最近更新 更多