c# - Blazor Wasm .Net 5 - 实现个人用户帐户和 Azure AD 身份验证
问题描述
下面的 Microsoft 文档说明了如何使用两种不同的身份验证方法保护 Blazor WASM 托管应用程序。
需要通过在单个应用程序中结合两种身份验证机制来为最终用户提供两种选择。用户应该能够从登录页面中选择其中一个选项。
Azure AD 选项只是为最终用户提供 SSO 体验,除此之外,所有授权逻辑都将使用单个用户帐户在本地处理。
使用 Azure Adoption 对用户进行身份验证后,应该有一种方法可以将用户与本地 ID 链接以处理授权逻辑等。
我做了很多在线研究,但我找不到实现这一点的指南或教程。我试图通过组合代码来实现这一点,但我坚持:
- 在 Blazor 客户端登录页面中同时启用 Local/AzureAd 登录选项
- 将 Azure AD 用户与服务器中的本地用户链接
Blazor 客户端代码
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.Services.AddHttpClient("BlazorWasmIndvAuth.ServerAPI", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>().CreateClient("BlazorWasmIndvAuth.ServerAPI"));
//OPTION 1
//Azure Ad Authentication
builder.Services.AddMsalAuthentication(options =>
{
builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
options.ProviderOptions.DefaultAccessTokenScopes.Add("api://123456/Api.Access");
});
//OPTION 2
//Individual User JWT authentication
builder.Services.AddApiAuthorization();
await builder.Build().RunAsync();
}
}
解决方案
快速的答案是您的客户端应用程序和 API 更喜欢只需要处理一个授权服务器。支持多个将非常混乱。
我的建议是您的应用程序只处理 IdentityServer,但允许通过 IdentityServer 登录到 Azure AD(联合身份验证)。请参阅 IdentityServer 中 QuickStartUI 中的 ExternalController.cs 文件。
看到这个页面
推荐阅读
- typescript - 如何在我的项目中使用 grunt.js 缩小 Typescript 代码?
- r - 贝叶斯推理模型遇到问题 - 带有 R 的 JAGS
- java - 设置 TextView 文本时应用程序冻结
- macos - 如何在 macOS 中编译 Traefik 的源代码以供贡献?
- python - 如何从数据框模式中的列中仅获取特定属性?
- amazon-web-services - 如何从同一账户内与 AWS EKS 通信?
- asp.net - Url.Action 为具有 Route 属性的 webapi 操作返回不正确的 URL
- java - 如何将应用内购买添加到按钮?
- python - 获取“无”而不是python中的值列表
- html - href 不显示为可点击的链接