散尽所有分,再次发贴,求WCF身份验证的问题。

chencane 2010-11-11 09:36:44
本人因项目需要,使用到了WCF。之前设计是在IIS上发布服务,然后在其它项目中引用。但是,为了防止其它软件厂商使用此项目中已经发布的服务,所以想使用身份验证的方式(或其它方式,如用户名,密码等),以防止被随意引用。

纠结了好几天,一直没有好的解决方案。项目中,暂不考虑对消息的加密,只考虑对用户身份的验证。

希望各位高人能给出切实可行的实际项目中验证的方案与技术。

先在此谢过了。

项目基于.NET4.0
...全文
190 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
a222123 2011-04-27
  • 打赏
  • 举报
回复
也在观望中,这个没弄过。
kingdom_0 2011-04-27
  • 打赏
  • 举报
回复
我看楼主还有352分呢啊,哈哈!
  • 打赏
  • 举报
回复
用os的账号,然后客户端使用NetworkCredential
chencane 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 billow_chentao 的回复:]

和LZ一样几个月来一直在思考这个问题,不知LZ目前有何方案?
网上看了很多WCF安全方面的资料都说WCF有很多技术,加密消息、证书等等把脑壳整晕了,结果没懂起。

不过自己一直有一个比较笨拙的方案希望在此提出来让高手指点:
在webServices上写一个自己系统的用户验证接口UserValidator(传入用户名和密码两参数)验证成功后产生一个登录ID返回,并把登录ID存在数据表里。客……
[/Quote]

也是麻烦呀。到现在还没有什么好的解决办法。也是头疼呀。
billow_chentao 2011-03-30
  • 打赏
  • 举报
回复
和LZ一样几个月来一直在思考这个问题,不知LZ目前有何方案?
网上看了很多WCF安全方面的资料都说WCF有很多技术,加密消息、证书等等把脑壳整晕了,结果没懂起。

不过自己一直有一个比较笨拙的方案希望在此提出来让高手指点:
在webServices上写一个自己系统的用户验证接口UserValidator(传入用户名和密码两参数)验证成功后产生一个登录ID返回,并把登录ID存在数据表里。客户端程序得到了这个登录ID后作为全局变量临时保存。
服务器上,其他所有的访问接口如获取客户档案、添加单据等都多加一个参数“登录ID”,接口每次被调用时都核对一下“登录ID”是否正确或过期。
这样一来其他厂商的程序,如果没有通过用户验证想直接访问接口就不行了,只有通过用户验证得到了“登录ID”后才能访问接口。
chencane 2011-03-30
  • 打赏
  • 举报
回复
再试一次。
adam0708 2011-03-04
  • 打赏
  • 举报
回复
WCF有很完善的身份验证机制。。。

http://leven.co/blog/view/121

这个博客上有很多相关信息
chencane 2011-02-22
  • 打赏
  • 举报
回复
再求xxxx
刀枪blue 2010-12-31
  • 打赏
  • 举报
回复
服务器上+个域名验证就好了
cch5487614 2010-12-31
  • 打赏
  • 举报
回复
customUserNamePasswordValidatorType
这个是你需要的
cch5487614 2010-12-31
  • 打赏
  • 举报
回复

public class MyUserValidate : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
if (userName != "sa" || password != "sa")
{

throw new SecurityTokenException("用户名密码错误!");

}
else
{

}
}
}


部分配置文件

<service name="HL7.Service.M.Dy.DyService" behaviorConfiguration="httpsBasicBindings">
<endpoint name="HL7.Service.M.Dy.DyService" address="" binding="wsHttpBinding" contract="HL7.Service.M.Dy.IDyService" bindingConfiguration="mybehaviorConfiguration">
</endpoint>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="https://127.0.0.1:9001/HL7/Dy" />
</baseAddresses>
</host>
</service>
</services>

<behaviors>
<serviceBehaviors>
<behavior name="httpsBasicBindings">
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<serviceCertificate storeName="My" x509FindType="FindBySubjectName" findValue="HL7Server" storeLocation="LocalMachine"/>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="HL7.Service.Demo.MyUserValidate,HL7.Service.Demo" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>

<bindings>
<wsHttpBinding>
<binding name="mybehaviorConfiguration">
<security mode="Transport">
<transport clientCredentialType="Basic"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
dodducs 2010-12-30
  • 打赏
  • 举报
回复
ip限制 + 用户每天使用数量授权 基本就可以解决你的问题了
jeven_xiao 2010-12-10
  • 打赏
  • 举报
回复
接分学习。这点很重要。应用很广啊
shichao102471077 2010-11-24
  • 打赏
  • 举报
回复
没搞过,学习下
gamewater 2010-11-24
  • 打赏
  • 举报
回复
同样在纠结
cshxiang 2010-11-23
  • 打赏
  • 举报
回复
不加密消息,用户名+密码的方式就没意义了,Windows集成认证不方便。


推荐:加密消息,用户名+密码 //需要证书。


chencane 2010-11-18
  • 打赏
  • 举报
回复
再顶一次。

guyehanxinlei 2010-11-18
  • 打赏
  • 举报
回复
使用Windows集成认证
八米二康 2010-11-18
  • 打赏
  • 举报
回复
<basicHttpBinding>
<binding name="Binding1" >
<security mode = "Message">
<message clientCredentialType="Certificate"/>
</security>
</binding>
</basicHttpBinding>

2008中的帮助:ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/fxref_system.servicemodel/html/42b24a4e-299f-8cbd-4551-11590de858f3.htm
juyamei126 2010-11-13
  • 打赏
  • 举报
回复
没做过 不过我想可以获取机器的cpuid来做验证吧
加载更多回复(3)

12,163

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧