应用程序url(部署在azure上)中的电子邮件验证代码找不到终结点

应用程序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

我有.net核心身份电子邮件验证端点设置,如下所示:

/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";