这是一个有趣的事情。在我的具有身份验证功能的 ASP.NET (.NET 8) 应用程序中,我有一个
IEmailSender<AppUser>
的实现(我们将其称为 IdentityEmailService
)。 IdentityEmailService
已注册到瞬态范围,并且仅依赖于单例。在内部,它使用 Mailkit 通过匿名 SMTP 中继发送电子邮件。 SMTP 请求通过 IP 地址进行验证,因此不需要证书。
我有一个
DebugController
,我与Postman结合使用来测试SendEmailConfirmationLink
的IdentityEmailService
方法。
如果我通过调试控制器触发
SendEmailConfirmationLink
功能,一切正常。但是,如果我点击触发相同 SendEmailConfirmationLink
函数的身份端点,那么我会从中继服务器收到错误:
5.7.64 租户归因;中继访问被拒绝 [“”的验证状态为空证书]
IdentityEmailService
肯定用于这两个呼叫。此外,Mailkit SmtpClient 看起来相同(如果我在调用发送函数之前放置一个断点并比较两个客户端的属性)。
我能想到的唯一区别是 Identity 库在任何 DI 范围之外调用服务,而
DebugController
确实有一个范围,但由于该服务仅依赖于单例,所以我不知道它会如何改变任何东西.
想通了。这是因为 SMTP 服务器显然被配置为仅允许某些域的出站收件人。我的两次测试使用了不同的收件人地址,其中之一是 Gmail 地址,这显然是不允许的。