NetworkCredentials以纯文本形式公开密码

Tob*_*sen 2 .net c#

我即将在我的C#/ WPF应用程序中创建一个身份验证模块.要对用户进行身份验证,我想NetworkCredential用来存储凭据.

Credential = new NetworkCredential(credential.UserName, credential.Password);
Run Code Online (Sandbox Code Playgroud)

其中credential.UserNamea是a stringcredential.Password类型SecureString.调试应用程序时,我可以在纯文本和安全字符串中看到密码

在此输入图像描述

为什么密码是以纯文本形式公开的?这不是一个可能的安全威胁吗?

谢谢回答.

编辑:

对于记录,该NetworkCredential对象应在WCF客户端上使用,如下所示:

client.ClientCredentials.Windows.ClientCredential = Credentials
Run Code Online (Sandbox Code Playgroud)

Jam*_*rpe 12

NetworkCredential类内部总是存储密码SecureString:

 public string Password {
        get {
            ExceptionHelper.UnmanagedPermission.Demand();
            return InternalGetPassword();
        }
        set {
            m_password = UnsafeNclNativeMethods.SecureStringHelper.CreateSecureString(value);
        }
    }
Run Code Online (Sandbox Code Playgroud)

当有人需要以纯文本的形式检索密码时(无论是从某个类还是从该类中的某个地方开始),它都会从安全字符串中检索密码:

    internal string InternalGetPassword() {
        string decryptedString = UnsafeNclNativeMethods.SecureStringHelper.CreateString(m_password);
        return decryptedString;
    }
Run Code Online (Sandbox Code Playgroud)

使用调试器时,它显示属性,因此从中检索值 SecureString