生成的代码是 Base64 编码的,出于安全原因,默认情况下不允许在 URL 的路径段中使用 Base64 中的某些字符,即使是 URL 编码也是如此。虽然可以更改它,但您不应该这样做,因为安全问题是有效的,并且您不希望将您的应用程序暴露给漏洞利用。
相反,您可以简单地让代码成为查询字符串的一部分。URL 的查询字符串部分不存在相同的漏洞,并且这些字符将被允许存在。或者,您可以使用不同类型的代码。可以自定义 Identity 用于电子邮件确认和密码重置等操作的令牌提供程序。
身份包括其他令牌提供程序,用于两因素身份验证,如果您愿意,您可以使用它们进行切换。这些使用基于 TOTP 的令牌(您在 2FA 中一直看到的 6-7 位数字)。或者,您可以创建自己的自定义提供程序并根据需要处理它。要更改提供者,您只需Tokens
在设置身份时配置成员:
services.AddIdentity<ApplicationUser, IdentityRole>(o =>
{
// other options here like password reqs, etc.
o.Tokens.ChangeEmailTokenProvider = TokenOptions.DefaultEmailProvider;
o.Tokens.EmailConfirmationTokenProvider = TokenOptions.DefaultEmailProvider;
o.Tokens.PasswordResetTokenProvider = TokenOptions.DefaultEmailProvider;
}
以上将导致这三个场景通过 生成令牌EmailTokenProvider
,这是内置的基于 TOTP 的提供程序之一。
如果您想使用自定义提供程序,您只需创建一个实现IUserTwoFactorTokenProvider<TUser>
并注册的类:
services.AddIdentity<ApplicationUser, IdentityRole>(o =>
{
...
})
.AddTokenProvider<MyCustomTokenProvider<ApplicationUser>>("MyTokenProviderName");
您用作“名称”的字符串是您在上面的代码中将其分配为令牌提供者的字符串,即:
o.Tokens.PasswordResetTokenProvider = "MyTokenProviderName";