.net-core - 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 的简单查询。
解决方案
推荐阅读
- amazon-web-services - IAM 凭证轮换通知
- c# - 有没有办法可以使用类似的东西?运算符来检查此处的值并运行这两个中的任何一个而不需要使用两个 if 语句?
- angular - 使用 Angular 修改模态框内的 src 属性
- python - 将多个Dataframe合二为一并填写缺失信息
- javascript - 在 Firefox 调试器中的断点后或调用警报函数后,全屏不工作
- excel - Alteryx 下载和处理多标签 Excel
- python-3.x - 导入多个 .xlsx 文件并使用 openpyxl 将数据操作数据写入单个新 xlsx 文件和多个工作表执行算术运算?
- python - 如何在 Ubuntu 或 Debian 上使用 ipython 测试
- python - 实体识别类
- javascript - 如何更新猫鼬特定值而不将其他值转换为null?