我们正在迁移一个遗留的web应用程序,但希望保留存储在数据库中的特定于应用程序的用户信息。我们已经成功地针对新的Azure AD设置了身份验证—我们使用OIDC与多个租户。用户登录后,我们将通过他们的电子邮件地址从数据库中查找相关的用户记录。问题在于将现有的用户数据映射到ClaimPrincipal
。文档声称我们可以扩展IdentityUser
并通过:
services.AddIdentity<AppUser, IdentityRole>(); //AppUser is our custom IdentityUser
现在,我们的Startup.cs
文件包含:
services.AddIdentity<AppUser, IdentityRole>();
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"));
然而,服务解析器对此并不满意。
一些服务无法被构造(验证时出错)服务描述符ServiceType:Microsoft.AspNetCore.Identity.ISecurityStampValidator生存期:限定ImplementationType:Microsoft.AspNetCore.Identity.SecurityStampValidator"1 (GcfConnect.Application.Web.Security.Models.AppUser)":无法解析服务的类型"Microsoft.AspNetCore.Identity.IUserStore"1 (GcfConnect.Application.Web.Security.Models.AppUser)"当试图激活…(剪辑)
我如何使用自定义IdentityUser
与Azure AD身份验证?我是否需要为整个身份系统(UserStore
、UserManager
等)提供自定义替换?
如果您正在使用EF,请尝试将其更改为操作。
需要添加AddEntityFrameworkStores():
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<WorldContext>();