您如何通过REST接口获得针对天蓝色托管身份的令牌?

时间:2018-10-06 08:30:34

标签: azure azure-management service-principal

这个问题是指文章:

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:7071http://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调用来实现。

谢谢!

1 个答案:

答案 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