ASP.NET 核心 6 非默认身份 UI 基于身份验证,基于 email/sms TFA

ASP.NET Core 6 non Default Identity UI based Authentication with email/sms based TFA

我必须通过 sms/email 将具有 TFA 身份验证的网站移植到 asp.net 6. 客户端不想使用身份验证器应用程序。该应用程序有一些特殊性,例如 URL 路径中的用户语言作为第一个组件。

在这个post中,我搜索了一种介绍语言部分的方法,虽然很丑陋,但还是成功了。

但是我也 quite 不高兴使用默认的 UI 通常用于此应用程序,因为我必须手动停用所有不需要的东西 ui红色但包含在库中。对于如此少的 required 功能,拥有如此庞大的页面框架感觉非常不整洁。我唯一需要的是

用户配置文件的配置是在另一个应用程序中完成的,不应包含在此应用程序中(因此必须停用所有默认身份 ui 内容)。

我试图通过控制器操作手动创建身份验证逻辑,而根本没有安装默认 ui。对于使用用户名和密码登录,这很容易。

但是,设置 TFA 部分似乎 qui 既乏味又危险(从安全角度来看)。我没有找到任何文档必须注册哪些资源以及如何设置身份验证系统。

搜索所有 required 依赖项并从默认身份的 Microsoft 源代码创建代码是唯一的方法吗UI?
或者是否有模板解决方案来实现预期目标?

由于似乎没有可用的此类信息,我从 ms 源代码中收集了必要的代码。也许对某人有帮助:

注册
ms源码复制出来,这里required registrations:

builder.Services.AddIdentityCore<MyUserType>().AddDefaultTokenProviders();
builder.Services.TryAddScoped<ITwoFactorSecurityStampValidator, TwoFactorSecurityStampValidator<MyUserType>>();
builder.Services.TryAddScoped<ISecurityStampValidator, SecurityStampValidator<MyUserType>>();

builder.Services.AddAuthentication(options => {
        options.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme;
        options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;
        // options.DefaultSignInScheme = IdentityConstants.ExternalScheme;
    })
        .AddCookie(IdentityConstants.ApplicationScheme, o =>
        {
            o.LoginPath = [your login path];
            o.LogoutPath = [your logout path];
        })
        //.AddCookie(IdentityConstants.ExternalScheme, o =>
        //{
        //    o.Cookie.Name = IdentityConstants.ExternalScheme;
        //    o.ExpireTimeSpan = TimeSpan.FromMinutes(5);
        //})
        .AddCookie(IdentityConstants.TwoFactorRememberMeScheme, o =>
        {
            o.Cookie.Name = IdentityConstants.TwoFactorRememberMeScheme;
            o.Events = new CookieAuthenticationEvents
            {
                OnValidatePrincipal = SecurityStampValidator.ValidateAsync<ITwoFactorSecurityStampValidator>
            };
        })
        .AddCookie(IdentityConstants.TwoFactorUserIdScheme, o =>
        {
            o.Cookie.Name = IdentityConstants.TwoFactorUserIdScheme;
            o.ExpireTimeSpan = TimeSpan.FromMinutes(5);
        });

外部身份验证的注册被注释掉了,可能有人也想用,所以我没有直接从代码中删除它。可以根据您的 login-action 相应地设置登录路径。请参阅我的其他 post 关于如何扩展登录 url 以引入语言和其他路径组件。

Controller-code
然后可以从原始默认标识 ui 代码派生控制器的操作代码和视图。 AddDefaultTokenProviders 调用是 required 以注册电子邮件令牌提供商。

结果
这样一来,默认的 ui 及其所有丰富的功能都不再存在于项目中,并且可以有选择地决定要集成哪些部分。