【WCF】使用“用户名/密码”验证的合理方法
我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”。以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然后在服务器端自定义一个消息拦截器来验证用户名和密码。
以老周不靠谱的学识水平认为,这样做不好,直接把明文而且敏感信息放在SOAP头中传输,这尺度实在太大了,太暴露了,广电局是不会允许的,虽然现在流行穿得越少越好,但那些是婊子的境界。像用户名密码这些重要信息,怎么能直接传输呢,这很容易被偷窥的。
其实,WCF并不要求客户端必须安装服务器证书。证书就好比身份证,用来标识你的身份的,所以你不能拿着你外公的身份证去实名买火车票,除非售票的人是傻逼才会卖给你。
一般来说,传输层的安全是不需要提供证书的,但是消息安全是要求服务器提供证书的,客户端可以以证书为凭据,也可以不提供,即只对服务器有要求,客户端可选择其他凭据,如Windows验证。经过老周试验,如果客户端凭据为Windows,那么服务器也可以不设置证书的。不过,对用户名/密码验证方式,服务器必须提供证书。
说白了,根本不必为每个客户端安装服务器证书,完全不应该把用户名密码放在Header里面,那样太危险。
说再多废话意义不大,还是来个例子有用。
要实现自定义的用户名密码验证,需要实现一个抽象类——UserNamePasswordValidator。
class CustUsernamepwdValidator : UserNamePasswordValidator { public override void Validate(string userName, string password) { if (userName != "延伸阅读
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26
学习是年轻人改变自己的最好方式

