gpt4 book ai didi

azure - 对多个后端服务的 Azure AD 用户进行身份验证

转载 作者:行者123 更新时间:2023-12-02 07:42:51 24 4
gpt4 key购买 nike

我正在尝试寻找一种授权 Web 客户端的策略,该客户端可以对 Azure 中托管的两项服务进行 HTTP 调用。 Web 客户端都是客户端,两个 API 服务是 Azure 中托管的 Azure Functions。

对于上述三个应用程序中的每一个,我都在 Azure AD 中设置了应用程序注册,并向 Web 客户端公开了两个 Azure Functions 应用程序的范围,以允许客户端调用它们。我还为两个 API 应用程序设置了应用程序角色,并将这些角色分配给用户。

当 Web 客户端对每个 API 服务进行单次调用时,当前设置效果非常好。但是,我希望 Web 客户端调用服务 A,然后服务 A 使用 Web 客户端用户的凭据对服务 B 进行 HTTP 调用。据我所知,当Web客户端调用服务A时,给予Web客户端的 token 只有服务A的范围和角色,而没有服务B的任何内容。

我的问题是,允许将用户凭据传递到内部服务的建议策略是什么?特别是当原始 token 没有额外服务的凭据时。

我确实找到了这个问题( App service to app service auth in Azure using Managed Identity ),它非常接近我想要完成的任务。标记的答案似乎暗示我自己的应用程序负责为额外服务生成新 token ,但我不确定哪个应用程序负责这一点。是否建议 Web 客户端向服务 B 发出单独的请求以获取 token ,并在对服务 A 的 HTTP 请求中,在调用时将服务 B 的 token 包含在请求正文中?

最佳答案

不久前我遇到了这样的场景,我必须从前端获取后端 API 的用户 token ,然后在该 API 调用中调用后端的 Azure 管理 API。

我最终实现的解决方案是启用 token 获取以调用下游 API,然后使用现有用户的 token 在后端 API 中获取 token 。

我的 Startup.cs 类中的代码:

services
.AddMicrosoftIdentityWebApiAuthentication(Configuration, "ApiSettings")
.EnableTokenAcquisitionToCallDownstreamApi()//This does the magic
.AddInMemoryTokenCaches();

在我的 API Controller 中,我必须使用以下内容注入(inject) ITokenAcquisition:

private readonly ITokenAcquisition _tokenAcquisition;

public MyController(ITokenAcquisition tokenAcquisition)
{
_tokenAcquisition = tokenAcquisition;
}

然后使用它来获取 Azure 管理 API 的 token :

/// <summary>
/// Gets the access token on behalf of signed-in user to perform Azure
/// Resource Manager (ARM) API.
/// </summary>
/// <returns>
/// Access token.
/// </returns>
private async Task<string> GetAccessTokenForAzureSubscriptionManagementApiRequest()
{
IEnumerable<string> azureServiceManagementApiScopes = <scopes for Azure Management;
string accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(azureServiceManagementApiScopes);
return accessToken;
}

您可以在这里了解更多信息:https://learn.microsoft.com/en-us/azure/active-directory/develop/scenario-web-app-call-api-app-configuration?tabs=aspnetcore .

关于azure - 对多个后端服务的 Azure AD 用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71389400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com