使用 IdentityServer4、Asp.Net Core Identity 和自定义提供程序进行 Blazor WebAssembly 身份验证,无需实体框架

问题描述 投票:0回答:2

我有一个 Blazor 服务器端应用程序,它使用不使用实体框架的 CosmosDB 自定义身份提供程序。我想将应用程序转换为托管在 Asp.net Core 上的 Blazor WebAssembly。

我的 Blazor 服务器端 Startup.cs 自定义提供程序如下所示:

services.AddTransient<IRoleStore<ApplicationRole>, CosmosDBRoleStore<ApplicationRole>>(); services.AddTransient<IUserStore<ApplicationUser>, CosmosDBUserStore<ApplicationUser>>(); services.AddIdentity<ApplicationUser, ApplicationRole>().AddDefaultTokenProviders(); services.AddAuthentication(); services.AddAuthorization();

Visual Studio 中用于 Blazor WebAssembly 的当前模板

托管在 Asp.net Core 上在 Asp.Net Core Identity + SQL Server 之上使用 Identity Server4,并且需要来自 Entity Framework Core 的 DBContext。

services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>(); services.AddIdentityServer().AddApiAuthorization<ApplicationUser, ApplicationDbContext>(); services.AddAuthentication().AddIdentityServerJwt();

我安装了自定义 Cosmos DB 身份提供程序,但是行

services.AddIdentityServer().AddApiAuthorization<ApplicationUser, ApplicationDbContext>();

需要实体框架 DBContext 来填充 IdentityServer4 的所有参数。

我分析了四种场景:

1)在我的自定义身份提供程序之上使用实体框架,但它几乎需要完全重新编码,因为它使用深度自定义的 CosmosDB 与自定义登录/注销/注册等页面的集成

2)在我的自定义提供程序之上使用 Identity Server4,但我对它很陌生,整个框架很复杂,所有使用 Asp.Net Core Identity 的示例也使用实体框架,我不知道如何做吧。

3) 放弃我的自定义身份提供商并使用 Azure B2C。经过一些测试后,我发现它很混乱且难以定制,带有弹出窗口和无品牌的确认电子邮件。这也将使自定义个人资料编辑页面上数周的工作失效。

4) 将项目保留在 Blazor 服务器端并且不要迁移

我缺少什么可以帮助解决问题吗?任何可以帮助使用不使用实体框架的自定义身份提供程序配置 IdentityServer4 的库?

asp.net-identity identityserver4 blazor
2个回答
1
投票
经过几天的测试,我终于达到了我想要的效果:

“将 Blazor Server 应用程序移植到 Asp.net Core 上托管的 Blazor WebAssembly,保留我的自定义 Asp.net Identity + CosmosDB 提供程序,而不使用 Identity Server 4 和实体框架。”

我创建了 JWT 令牌身份验证服务 + 状态提供程序的手动实现,并将其连接到 Asp.Net Core Identity。

我使用这个项目作为指南,其中包含完整的工作 JWT 实现:

https://github.com/CodeMazeBlog/blazor-series/tree/blazor-web assembly-authentication-aspnetcore-identity


0
投票
弗朗西斯科,

刚刚看到这个...想做同样的事情,但是用 cookies 而不是 jwt。请发送相关片段,我会尽力使其正常工作并向您发送新代码。

谢谢, 杰瑞

[电子邮件受保护]

© www.soinside.com 2019 - 2024. All rights reserved.