首页新闻找找看学习计划

WCF怎么统一提供一个验证用户名和密码的入口

0
悬赏园豆:10 [已解决问题] 解决于 2015-01-15 11:30

我想问下,现在我写的WCF接口供n家调用,我给n家都分配了一个用户名和密码,绑定了他们的ip,现在我想知道他们调用接口的时候首先要验证用户名和密码,不知道这个验证能不能用这种Message拦截?先判断是否授权成功,如果不成功就直接在InterceptService中给他返回client,如果授权成功就通过直接去访问接口?如果这种方法比较复杂,能否提供下WCF统一验证授权的通道思路呢!!!而不是在调用每个方法前都去验证下用户名和密码!

无处安放的青春的主页 无处安放的青春 | 初学一级 | 园豆:149
提问于:2015-01-14 14:27
< >
分享
最佳答案
1

第一次验证用户名通过后,发一个guid作为临时令牌给客户端,客户端以后的请求都需要传这个key,服务端记住这key,这个key存在即表示合法。

收获园豆:10
arg | 小虾三级 |园豆:1047 | 2015-01-14 15:23

那我怎么判断他是第一次调用这个服务呢?是规定吗?还有这个临时令牌的有效期,假如这回访问完毕,那下回还得需要验证?再发令牌?还有这个令牌我是单独存到第三方接口用户的表中吗?

无处安放的青春 | 园豆:149 (初学一级) | 2015-01-14 15:28

@无处安放的青春: 专门开放一个类似登录的方法,登录成功服务这边存贮好key,客户端也要存储好自己的key,至于怎么存储那看具体情况了。过期策略服务端定咯,如果后续请求验证不到key,则告诉客户端需重新登录。

arg | 园豆:1047 (小虾三级) | 2015-01-14 15:39

@arg: 关键问题来了,

1.就是你的意思是我抽出来一个公共的验证方法,调用前先验证下是吧?当客户端调用WCF服务是,也就是调用服务中的每个方法时,我都去验证下,这是目前的方案,不知道阁下能重新提供一个思路吗?

2.还有我现在是给每家分配的用户名和密码,然后绑定ip不知道这样安全性如何!

3.我看你说的那种方式类似于OAUTH2.0中的获取令牌方式,我如果给每家用户分配一个guid,让他们保存起来,每次请求直接带着这个guid,然后服务端去库中匹配,这样安全性是不是更高点,回到第一点就是如何提供这个WCF统一验证用户授权的入口,刚开始我想的是在每个服务类中的构造函数里面验证,但是不知道怎么获取客户端参数,和直接返回给客户端授权不通过

无处安放的青春 | 园豆:149 (初学一级) | 2015-01-14 15:46

@无处安放的青春: 

1,是你说的那样

2,已经算是安全了

3,http://blog.csdn.net/fangxing80/article/details/6144893,WCF 学习总结5 -- 消息拦截实现用户名验证

通知用户权限未通过,返回特定编码,约定该编码表示权限未通过。

arg | 园豆:1047 (小虾三级) | 2015-01-14 18:21

@arg: 你说的这个消息拦截,那客户端引用的时候不仅要引用服务地址,还得配置扩展行为,编写WcfClientInterpector这个类库,这种向MessageHeader这个上面添加用户名和密码,不是很麻烦吗?

为何不 client.ClientCredentials.UserName.UserName = "123";直接客户端这样子赋值用户名和密码。

无处安放的青春 | 园豆:149 (初学一级) | 2015-01-15 10:02

@无处安放的青春: 

可以啊,只要能实现,怎么方便怎么弄。

2年没用过wcf,一些功能忘记了,不好意思。

arg | 园豆:1047 (小虾三级) | 2015-01-15 12:29

@arg: 没事,非常感谢,帮我的不仅仅是技术,更重要的是思想!!!赞一个!

无处安放的青春 | 园豆:149 (初学一级) | 2015-01-15 12:30
其他回答(1)
0

一楼解答的很好了

笋干 | 园豆:76 (初学一级) | 2015-01-15 11:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册