当前位置:  开发笔记 > 编程语言 > 正文

在TLS加密下使用DefaultNetworkCredential?

如何解决《在TLS加密下使用DefaultNetworkCredential?》经验,为你挑选了1个好方法。

我们公司正在将SMTP邮件服务器切换到Office 365.关键问题是新的SMTP服务器"smtp.office365.com"仅支持TLS加密.因此,我不能使用CredentialCache.DefaultNetworkCredentials自动编码我的Windows登录密码.

        var smtpClient = new SmtpClient("smtp.oldserver.com")
        {
            Credentials = CredentialCache.DefaultNetworkCredentials
        };

        const string from = "myemail@xyz.com";
        const string recipients = "myemail@xyz.com";
        smtpClient.Send(from, recipients, "Test Subject", "Test Body");

以前这个没有任何问题.但是,如果我现在将上述代码段更改为:

        var smtpClient = new SmtpClient("smtp.office365.com");
        smtpClient.EnableSsl = true;
        smtpClient.Port = 587;
        smtpClient.Credentials = CredentialCache.DefaultNetworkCredentials;

我现在得到:

Unhandled Exception: System.Net.Mail.SmtpException: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM

但是,如果我在代码中指定我的Windows登录用户名和密码,它可以正常工作:

smtpClient.Credentials = new NetworkCredential("myemail@xyz.com", "mypassword");

所以:

    是否可以使用DefaultNetworkCredentialsTLS加密编码密码,但是可以使用它?

    如果1.不可能,有没有更好的方法在其他地方编码我的Windows密码而不直接在代码中将其显示为纯文本?

Alon Catz.. 5

这两个主题 - 凭据和加密 - 是无关的.DefaultNetworkCredentials仅在邮件服务器和您的计算机属于同一"网络"或更准确,相同或连接的Active Directory服务器时才有效.我猜测旧的SMTP服务器是内部部署的,并且是您办公室网络的一部分.O365服务器位于云中,不共享AD.

当您明确提供凭据时,它可以正常运行,因为O365可以对您进行身份验证.

有可能使用Azure Active Directory并以某种方式将其连接到您的内部部署Active Directory.我不熟悉细节,但我知道可以做到.我相信如果你正确设置它,DefaultNetworkCredentials将重新开始工作.

有关O365身份验证的详细信息:https://blogs.office.com/2014/05/13/choosing-a-sign-in-model-for-office-365/

如果需要存储密码,则需要将其加密存储.看到这个答案:在.NET C中存储加密密钥的最佳方式#



1> Alon Catz..:

这两个主题 - 凭据和加密 - 是无关的.DefaultNetworkCredentials仅在邮件服务器和您的计算机属于同一"网络"或更准确,相同或连接的Active Directory服务器时才有效.我猜测旧的SMTP服务器是内部部署的,并且是您办公室网络的一部分.O365服务器位于云中,不共享AD.

当您明确提供凭据时,它可以正常运行,因为O365可以对您进行身份验证.

有可能使用Azure Active Directory并以某种方式将其连接到您的内部部署Active Directory.我不熟悉细节,但我知道可以做到.我相信如果你正确设置它,DefaultNetworkCredentials将重新开始工作.

有关O365身份验证的详细信息:https://blogs.office.com/2014/05/13/choosing-a-sign-in-model-for-office-365/

如果需要存储密码,则需要将其加密存储.看到这个答案:在.NET C中存储加密密钥的最佳方式#

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有