如何使用 MSI 而不是 Service Principal 来调用部署在 Azure 上的 Authenticate web api

Posted

技术标签:

【中文标题】如何使用 MSI 而不是 Service Principal 来调用部署在 Azure 上的 Authenticate web api【英文标题】:How to use MSI instead of Service Principal to call Authenticate web api deployed on Azure 【发布时间】:2021-10-04 11:12:08 【问题描述】:

目前我对使用 API 的概念 MSI 很陌生。我有一个 Azure 应用服务,包括部署的 Web 作业和经过身份验证的 Web API。我也有用于身份验证的 Azure AD 应用程序。但是我正在使用 AuthenticationContext 和 ClientCredentical 来获取 Token ,该 Token 将在 Authentication Header 值中进一步使用。现在我必须删除 ClientCredentical 并添加 MSI 以获取身份验证令牌或对 Web api 进行身份验证。这里我添加一些我正在使用的示例代码。

var authContext = new AuthenticationContext(authority);
var clientCred = new ClientCredentical(clientID, clientKey);
var token = authContext.AcquireTokenAsync(clientId, clientCred).Result.Token;
httpClient.DefaultRequestHeaders.Autheorization = new AuthenticationHeaderValue('Bearer',token);

我已经阅读了一些官方文档,但无法清楚地了解它。我也尝试过使用DefaultAzureCredential

new DefaultAzureCredntial().GetTokenAsync(scope).Result.Token 我必须实现一些可以在本地以及在部署版本中工作的解决方案。 DefaultAzureCredential 根据环境更改访问方法,但仍然不适用于 Visual Studio。

【问题讨论】:

您需要发布您遇到的错误。您最好反序列化您发送的身份验证令牌以检查资源和用户,以确保它对于端点是正确的。 如果您也有权访问 API,则应使用 Visual Studio 【参考方案1】:

如果要获取 ManagedIdentities 的令牌,则需要使用 Azure Identity SDK。 https://docs.microsoft.com/en-us/dotnet/api/azure.identity?view=azure-dotnet

如果你想在 Azure 和本地环境中测试它,DefaultIdentityCredential 是一个不错的选择。如果您想对此进行更多控制,您可以将 ChainedTokenCredential 与您想要尝试的凭证类型一起使用。 (在您的情况下,托管身份凭证、visualstudiocode 凭证、azure cli 凭证)。有关 Node 中的一个非常基本的示例,请参阅 https://github.com/udayxhegde/keyvault_managedid_node

【讨论】:

以上是关于如何使用 MSI 而不是 Service Principal 来调用部署在 Azure 上的 Authenticate web api的主要内容,如果未能解决你的问题,请参考以下文章

如何获取最新的 JRE / JDK 作为 zip 文件而不是 EXE 或 MSI 安装程序? [关闭]

使用 MSI 从本地 Service Fabric 群集访问 Key Vault

在powershell中返回消息而不是msi的退出代码

是否不可能制作 perMachine 而不是 perUser 的电子应用 MSI 安装程序?

msi删除文件而不是替换它们

如何查看 MSI 是不是启用了 InstanceTransforms?