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 功能,拥有如此庞大的页面框架感觉非常不整洁。我唯一需要的是
- 使用用户名和密码登录
- 如果用户为此配置了帐户,可选择检查 tfa email/sms 代码。
用户配置文件的配置是在另一个应用程序中完成的,不应包含在此应用程序中(因此必须停用所有默认身份 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 及其所有丰富的功能都不再存在于项目中,并且可以有选择地决定要集成哪些部分。
我必须通过 sms/email 将具有 TFA 身份验证的网站移植到 asp.net 6. 客户端不想使用身份验证器应用程序。该应用程序有一些特殊性,例如 URL 路径中的用户语言作为第一个组件。
在这个post中,我搜索了一种介绍语言部分的方法,虽然很丑陋,但还是成功了。
但是我也 quite 不高兴使用默认的 UI 通常用于此应用程序,因为我必须手动停用所有不需要的东西 ui红色但包含在库中。对于如此少的 required 功能,拥有如此庞大的页面框架感觉非常不整洁。我唯一需要的是
- 使用用户名和密码登录
- 如果用户为此配置了帐户,可选择检查 tfa email/sms 代码。
用户配置文件的配置是在另一个应用程序中完成的,不应包含在此应用程序中(因此必须停用所有默认身份 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 及其所有丰富的功能都不再存在于项目中,并且可以有选择地决定要集成哪些部分。