3

这个问题参考了这篇文章:

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

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

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

示例:在天蓝色的 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 上加载的工作参数完全相同。

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

将 Microsoft.Azure.Services.AppAuthentication 库用于 .NET 的 .NET 应用程序和函数,使用托管标识的最简单方法是通过 Microsoft.Azure.Services.AppAuthentication 包。此库还允许您使用 Visual Studio、Azure CLI 或 Active Directory 集成身份验证中的用户帐户在开发计算机上本地测试代码。有关此库的本地开发选项的更多信息,请参阅 Microsoft.Azure.Services.AppAuthentication 参考。本节向您展示如何开始使用代码中的库。将 Microsoft.Azure.Services.AppAuthentication 和 Microsoft.Azure.KeyVault NuGet 包的引用添加到您的应用程序。

但是,该库仅在我未使用的 .net 中可用,并且没有真正解释您将如何通过 REST 调用进行操作。

谢谢!

4

1 回答 1

2

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

不幸的是,当您无法使用 AppAuthentication 库时,这似乎目前并不容易。请参阅此 GitHub 建议

因此,如果您不想将一些调试代码破解到您的生产代码中,您可能需要在本地托管一个“自定义 MSI 代理”,它只通过客户端凭据(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&api-version=2017-09-01

于 2018-10-06T17:02:38.183 回答