首页 > 解决方案 > Blazor WebAssembly Standalone 访问多个受 AAD 保护的 API

问题描述

我已经设法使默认模板工作(我的 blazor 独立 SPA 应该从不同的 ADApp 获取多个范围的令牌 - webAPI;即使我定义了 additionalScopes 或 defaultaccesstokenscopes,我也设法只为一个范围获取令牌)。

builder.Services.AddMsalAuthentication(options =>
{
    var config = options.ProviderOptions;
    config.Authentication.Authority = "https://login.microsoftonline.com/tenantID";
    config.Authentication.ClientId = "clientID";
    options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("https://graph.microsoft.com/user.read");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("https://tenant.crm.dynamics.com/user_impersonation");
    options.ProviderOptions.DefaultAccessTokenScopes.Add("clientID/scope1");
    // tried this too
    // config.AdditionalScopesToConsent.Add("https://tenant.crm.dynamics.com/user_impersonation");
});

现在有一个关于如何获取其他令牌的问题,因为如果提到多个范围,它仅获取“clientID”范围的令牌......?并在 HttpClient 请求中使用来自 wasm 页面的那些令牌?

在 Angular(使用 MSAL)中,这一切都是自动完成的,您定义所需的范围并获取所有令牌。然后拦截所有请求,并按请求的域添加授权标头和相应的令牌。

这里是否有类似的机制,或者是否应该通过为每个请求添加相应的令牌并将 HttpRequestMessage 与 HttpClient.SendAsync() 一起使用来手动完成?

显然,对于业务应用程序,如果不联系某种受保护的 API(通常是同一个 AAD 中的应用程序),则没有多大用处。例如,假设它可以是对 Dynamics CRM 的 webapi 的简单查询。

标签: .net-coreazure-active-directorywebassemblywebapiblazor-client-side

解决方案


推荐阅读