这个问题是指文章:
https://docs.microsoft.com/en-us/azure/app-service/app-service-managed-service-identity
我试图弄清楚如何使用为Azure应用程序在本地工作而生成的服务主体进行模拟。
我遵循了这篇文章,当我部署azure函数以进行azure并从那里运行它时,我能够成功使用MSI_ENDPOINT和MSI_SECRET成功获取令牌。但是,当我在本地运行相同的部署时,它将失败。我使用完全相同的MSI_SECRET并将MSI_ENDPOINT更改为用于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之外,工作的参数与天蓝色完全相同。
关于如何解决此问题的任何建议,以便我可以在本地运行和测试?
使用.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调用来实现。
谢谢!
答案 0 :(得分:0)
据我了解,通过REST的MSI在云中为您工作,但在本地却不行。
不幸的是,当您无法使用AppAuthentication库时,目前看来这不容易实现。参见this GitHub suggestion。
因此,如果您不想在生产代码中使用一些调试代码,则可能需要在本地托管一个“自定义MSI代理”,该代理仅通过client credentials (appId + secret)执行经典身份验证即可返回令牌。< / p>
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