应用程序url(部署在azure上)中的电子邮件验证代码找不到终结点
我有.net核心身份电子邮件验证端点设置,如下所示:应用程序url(部署在azure上)中的电子邮件验证代码找不到终结点,azure,asp.net-core,email-confirmation,Azure,Asp.net Core,Email Confirmation,我有.net核心身份电子邮件验证端点设置,如下所示: /api/[controller]/{userId}/{emailVerificationCode} 我用Uri在注册端点中对其进行编码。EscapeDataString(使用Uri.UnescapeDataString进行解码,但这与此无关)。因此,当我收到电子邮件并单击链接时,我会在本地点击端点并对其进行调试,但在部署到azure(web app资源组)后,我会得到以下响应: The resource you are looking
/api/[controller]/{userId}/{emailVerificationCode}
我用Uri在注册端点中对其进行编码。EscapeDataString(使用Uri.UnescapeDataString进行解码,但这与此无关)。因此,当我收到电子邮件并单击链接时,我会在本地点击端点并对其进行调试,但在部署到azure(web app资源组)后,我会得到以下响应:
The resource you are looking for has been removed, had its name changed,
or is temporarily unavailable.
当我将代码缩短为不包含任何特殊字符(这些字符现在已编码为例如%2F,%3D等)时,会命中端点(但ofc标记无效)。
知道会是什么情况吗?生成的代码是Base64编码的,出于安全原因,默认情况下,即使URL编码,Base64中的某些字符也不允许出现在URL的路径段中。虽然可以改变这一点,但你不应该这样做,因为安全问题是有效的,而且你不想让你的应用暴露在漏洞之下 相反,您可以简单地让代码成为查询字符串的一部分。URL的查询字符串部分不存在相同的漏洞,并且允许在该部分使用字符。或者,您可以使用不同类型的代码。Identity用于电子邮件确认和密码重置的令牌提供程序可以自定义 Identity包括用于双因素身份验证的其他令牌提供程序,如果愿意,您可以使用这些令牌提供程序进行切换。这些使用基于TOTP的令牌(您在2FA中经常看到的6-7位数字)。或者,您可以创建自己的自定义提供程序,并根据需要处理它。要更改提供程序,只需在设置标识时配置
令牌
成员:
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;
}
您用作“名称”的字符串是您在上面代码中将其指定为令牌提供程序的字符串,即:
o.Tokens.PasswordResetTokenProvider = "MyTokenProviderName";
o.Tokens.PasswordResetTokenProvider = "MyTokenProviderName";