使用 Azure 托管服务标识和应用服务身份验证的服务到服务身份验证?

Posted

技术标签:

【中文标题】使用 Azure 托管服务标识和应用服务身份验证的服务到服务身份验证?【英文标题】:Service-to-service authentication using Azure Managed Service Identity & App Service Authentication? 【发布时间】:2019-01-24 16:52:52 【问题描述】:

我喜欢 MSI 带来的简单性,它是一种很棒的使用方式,例如Web App 中的 Key Vault,但我还没有完全弄清楚如何使用它来简化服务到服务的身份验证。应该可以吧?

对于 API 应用,我需要启用应用服务身份验证/授权。 对于调用方服务,启用托管服务标识。 我想这本身还不够(尽管它会很棒!),但我可能需要使用 HttpClient 以某种方式转发凭据?有任何想法吗?或者使用 AAD 服务主体实现服务到服务身份验证的任何其他推荐(和简单)方法?

【问题讨论】:

【参考方案1】:

如果我理解正确,您想知道如何通过 MSI 访问受 Azure AD 保护的 API。

一般来说,一旦为您的 Azure 服务(即 Azure Web 应用)启用 MSI,将同时创建一个 AD 企业应用程序,该应用程序代表您的 Azure AD 中的 Azure 服务。

对于您要访问的 API,您应该创建一个应用角色并将该角色分配给代表您的 Azure 服务启用了 MSI 的 AD 企业应用程序。完成所有流程后,您将能够通过以下代码获取访问令牌以访问所需的 API(此 C# 代码应在启用 MSI 的 Azure 服务上运行):

var azureServiceTokenProvider = new AzureServiceTokenProvider();
string apiToken = await azureServiceTokenProvider.GetAccessTokenAsync("<API resource URI or API App ID>");

更多详细信息可以参考blog。

【讨论】:

你知道我是否需要为我向受保护 API 发出的每个请求获取一个新令牌?我正在尝试调用受 Azure AD 保护的 API,我需要获取令牌,但我不确定是否需要在启动期间获取一次令牌并配置 startup.cs 以在创建 httpClient 时获取令牌?努力寻找例子。

以上是关于使用 Azure 托管服务标识和应用服务身份验证的服务到服务身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

使用托管标识从 Azure Logic 应用向 Azure Function 进行身份验证

Azure Functions App with APIM 使用托管标识 - 身份验证和授权

C# - 具有托管服务标识的 Azure 存储 [关闭]

在 Azure 中整合托管标识与身份验证/授权标识

Azure API 管理 + Azure 函数和托管标识

在 Azure 应用服务身份验证与身份验证(经典)中重定向以使用 AAD 登录