在客户端计算机上保护客户端密码
当使用ChannelFactory
类或生成的代理访问WCF服务时,是否可以在客户端计算机上保护客户端密码?
注意:我不是在通过电话线来保护密码。 而是问我是否有可能在客户端机器上保护密码,以便在用户通过客户端应用程序登录时有人不能使用工具来公开密码。
我相信这是一个不可能实现的目标。 无论我如何从用户获取和保护密码 - 在ChannelFactory
或Proxy对象上设置ClientCredentials
时,密码都会暴露。
例如,在ChannelFactory
对象上设置ClientCredentials
时:
var myChannelFactory = new ChannelFactory<IMyService>(myBinding, myEndpoint);
myChannelFactory.Credentials.UserName.UserName = GetUserName();
// Password will be set on channel factory as a string
myChannelFactory.Credentials.UserName.Password = GetPassword();
只要ChannelFactory
实例在内存中,那么如果某人拥有客户端机器,则密码是不安全的。 我知道加密可以被破坏,并且将任何文件放入正确的手中意味着它可以被破坏。 但是,我想知道是否至少可以让某人为之工作 - 但这似乎是一个漏洞,限制了开发人员在客户机器实际访问时可以保护系统的情况。
使用用户名/密码身份验证访问服务时,这只是一个事实吗?
如果你在客户端机器上使用密码散列,然后将它匹配到WCF服务上的散列,那该怎么办? 这样你就可以存储和发送散列。
我也已经做到了在哪里存储散列,但是当我去使用它时,我会将它与DateTime.UtcNow.ToString(“DDHH”)(日+小时)结合并再次散列它。 如果它在WCF端没有匹配,我会使用前一小时和后一小时重新检查。 在这里看到哈希。
链接地址: http://www.djcxy.com/p/3681.html