【发布时间】:2014-04-10 21:26:49
【问题描述】:
我目前有客户端设备提示用户输入用户/密码并创建一个System.Net.NetworkCredential 并传递给WCF 服务。此WCF 服务然后使用凭据在另一个外部服务上使用。
问题是每当我通过System.Net.NetworkCredential 到服务时,它似乎丢失了密码字段,所以我从来没有让它通过外部服务进行身份验证。我已经测试过只是以用户/密码的身份传入纯文本/字符串,它可以工作,但感觉这对安全性不利(尽管我确实为这两个服务之间的所有流量启用了 HTTPS)。
有没有办法将这些凭据正确传递给服务?
这是WCF服务的一些测试代码:
public string TestCred(System.Net.NetworkCredential c, string username, string pass)
{
cred = c;
userName = username;
passWord = pass;
string s = cred.UserName + cred.Password + "end";
return s;
}
我让它返回该字符串以测试在服务端实际收到的内容,并且密码完全为空(用户名使其正常)。
这是我在 WCF 服务上用来联系外部服务的代码:
externalService.Credentials = new System.Net.NetworkCredential(cred.UserName, cred.Password, "domain");
这不起作用,因为 cred.Password 字段为空白,我也尝试过:
externalService.Credentials = cred;
这也失败了。
当我使用纯字符串虽然效果很好:
externalService.Credentials = new System.Net.NetworkCredential(userName, passWord, "domain");
有什么建议吗?由于客户端设备-WCF 和 Service-External Service 之间的连接都是 HTTPS-SSL 需要的,所以它有点安全,但我感觉不太好通过字符串传递用户/传递。
【问题讨论】:
-
此类(System.Net.NetworkCredential) 不支持基于公钥的身份验证方法,例如安全套接字层 (SSL) 客户端身份验证
-
只需传递相同的凭据对象。你为什么要尝试创建一个新的?出于明显的安全原因,密码字段不可访问。
-
@VinayKumar.o NetworkCredentials 与 SSL 等传输加密完全无关。它是存储凭据的类,无论出于何种原因,这些凭据都将被库使用。 WCF 确实支持 SSL
-
@user3393394 你想做什么?为什么您的 client 将凭据传递给服务?这是一个非常奇怪的场景。您是否试图冒充客户?有一些基于标准的方法可以做到这一点,而不涉及通过移动密码来破坏安全性。
标签: c# asp.net .net web-services wcf