我想问下,现在我写的WCF接口供n家调用,我给n家都分配了一个用户名和密码,绑定了他们的ip,现在我想知道他们调用接口的时候首先要验证用户名和密码,不知道这个验证能不能用这种Message拦截?先判断是否授权成功,如果不成功就直接在InterceptService中给他返回client,如果授权成功就通过直接去访问接口?如果这种方法比较复杂,能否提供下WCF统一验证授权的通道思路呢!!!而不是在调用每个方法前都去验证下用户名和密码!
第一次验证用户名通过后,发一个guid作为临时令牌给客户端,客户端以后的请求都需要传这个key,服务端记住这key,这个key存在即表示合法。
那我怎么判断他是第一次调用这个服务呢?是规定吗?还有这个临时令牌的有效期,假如这回访问完毕,那下回还得需要验证?再发令牌?还有这个令牌我是单独存到第三方接口用户的表中吗?
@无处安放的青春: 专门开放一个类似登录的方法,登录成功服务这边存贮好key,客户端也要存储好自己的key,至于怎么存储那看具体情况了。过期策略服务端定咯,如果后续请求验证不到key,则告诉客户端需重新登录。
@arg: 关键问题来了,
1.就是你的意思是我抽出来一个公共的验证方法,调用前先验证下是吧?当客户端调用WCF服务是,也就是调用服务中的每个方法时,我都去验证下,这是目前的方案,不知道阁下能重新提供一个思路吗?
2.还有我现在是给每家分配的用户名和密码,然后绑定ip不知道这样安全性如何!
3.我看你说的那种方式类似于OAUTH2.0中的获取令牌方式,我如果给每家用户分配一个guid,让他们保存起来,每次请求直接带着这个guid,然后服务端去库中匹配,这样安全性是不是更高点,回到第一点就是如何提供这个WCF统一验证用户授权的入口,刚开始我想的是在每个服务类中的构造函数里面验证,但是不知道怎么获取客户端参数,和直接返回给客户端授权不通过
@无处安放的青春:
1,是你说的那样
2,已经算是安全了
3,http://blog.csdn.net/fangxing80/article/details/6144893,WCF 学习总结5 -- 消息拦截实现用户名验证
通知用户权限未通过,返回特定编码,约定该编码表示权限未通过。
@arg: 你说的这个消息拦截,那客户端引用的时候不仅要引用服务地址,还得配置扩展行为,编写WcfClientInterpector这个类库,这种向MessageHeader这个上面添加用户名和密码,不是很麻烦吗?
为何不 client.ClientCredentials.UserName.UserName = "123";直接客户端这样子赋值用户名和密码。
@无处安放的青春:
可以啊,只要能实现,怎么方便怎么弄。
2年没用过wcf,一些功能忘记了,不好意思。
@arg: 没事,非常感谢,帮我的不仅仅是技术,更重要的是思想!!!赞一个!
一楼解答的很好了