当前位置: 首页 > 知识库问答 >
问题:

如何通过REST接口获得azure托管身份的令牌?

云昊阳
2023-03-14

这个问题指的是该条:

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函数终结点的域。

示例:在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

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

使用微软。蔚蓝色的服务。用于的AppAuthentication库。净赚。NET应用程序和函数,使用托管身份的最简单方法是通过Microsoft。蔚蓝色的服务。AppAuthentication软件包。该库还允许您使用Visual Studio、Azure CLI或Active Directory集成身份验证的用户帐户,在开发机器上本地测试代码。有关此库的本地开发选项的更多信息,请参阅Microsoft。蔚蓝色的服务。认证参考。本节介绍如何开始使用代码中的库。添加对Microsoft的引用。蔚蓝色的服务。AppAuthentication和微软。蔚蓝色的KeyVault可将软件包添加到应用程序中。

但是,此库仅在中提供。net,我没有使用它,也没有真正解释如何通过REST调用实现它。

谢谢

共有1个答案

周良弼
2023-03-14

据我所知,MSI通过REST在云中为你工作,但不是在本地。

不幸的是,当您无法使用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

 类似资料:
  • 我在Azure中有一个应用程序服务使用连接字符串连接到Azure Cosmos Mongo API。我想知道是否有一种方法可以使用托管身份连接到Mongo API,而不是使用连接字符串。我知道这对于Cosmos SQL API是可行的,但是找不到任何关于Mongo API的信息。 谢谢你

  • 我试图通过ARM模板将Service Bus Receiver角色添加到用户分配的托管标识中。 i、 e.这一作用。https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#azure-服务总线数据接收器 这是模板 它返回这个错误。 状态消息:不允许更新租户ID、应用程序ID、主体ID和作用域。(

  • 我很少使用jersey实现创建rest服务。出于安全考虑,服务可以由任何一个调用。所以我决定使用基于令牌的认证系统。我在spring security中编写了一个过滤器,它在每个请求到达服务器之前处理它。 创建了一个登录服务,这样用户就可以通过传递有效凭据的用户名和密码来调用该服务,它将生成访问令牌和到期日期,并将其保存在Hashmap和DB中,并作为响应返回给用户。 对于剩余的服务,用户必须传递

  • 我为一个功能应用程序创建了一个托管身份,并通过以下两部分将其分配给DocumentDB Account Contributor https://docs.microsoft.com/en-us/azure/cosmos-db/managed-identity-based-authentication#assign-a-system-assigned-managed-identity-to-a-fu

  • 使用个人访问令牌(PAT) 使用OAuth 2.0 我正在使用第二种方法。按照本文档中的步骤进行操作:https://docs.microsoft.com/en-us/azure/devops/integration/get-start/authentication/oauth?view=azure-devops 我编写这个函数是为了使用OAuth2.0实现azure DevOps: 我对pyth

  • 我有一个在Azure VM中托管的php应用程序,在密钥库中有一些秘密。我已经设置了托管身份并获得了进入保险库的权限。 Azure SDK for php不支持密钥库,所以我使用REST接口。 我的问题是当在本地运行时,即我的代码在桌面上以VSCode运行时,我不能调用AIMS来获取令牌,因为我在本地机器上没有托管标识。 我只能想到两个选择: null 请注意,Visual Studio提供了Az