验证+ Authroizing Silverlight客户端到WCF Web服务

时间:2011-01-07 11:29:17

标签: silverlight wcf web-services authentication authorization

我的情况是我有一个Web服务,提供需要保护的数据(图像,媒体等),以便只能由相应的Silverlight客户端访问。可能有很多,有些人可以访问某些媒体,有些可以访问其他媒体。

Web服务存在且它当前是.asmx,但我们将把它升级到WFC。

到目前为止,在阅读了很多关于WCF和授权的博客之后,我发现了这个想法:

  1. 每个silverlight客户端在其配置中的某个位置都有一个客户端密钥。
  2. Web服务服务器受SSL保护,因此客户端ID被加密为Web服务参数。
  3. 通过客户端密钥完成身份验证。
  4. 通过客户端密钥完成授权。
  5. 据我所见,我认为这应该是安全的,但请随意挖洞!

    唯一让我感到困惑的是我的研究对于使用WCF进行身份验证和授权非常有利,但对我而言,它对我所需要的东西感觉太复杂了!更别说了解复杂的客户端配置文件如何适用于访问WCF服务的Silverlight应用程序。

    无论哪种方式,根据我的理解,使用WCF身份验证至少需要一个用户名和密码或证书,这两者都感觉非常笨拙,而不仅仅是提供一个不错的客户端密钥。

    我的想法是否安全可靠,或者我应该坚持使用我的WFC学习,因为框架是更好的解决方案?

    如果首选WCF安全框架,是否有任何高级建议可以告诉我保护我的Web服务需要哪种流程?

    期待听到人们的建议和经验! :)

    非常感谢!

    安迪

1 个答案:

答案 0 :(得分:0)

这种方式并不安全,因为Silverlight是客户端技术,因此SL控件及其配置都存储在用户计算机上。因此任何用户都可以自由访问/更改密钥 自定义会话是处理任务的最安全方式 例如:
身份验证/授权可以使用标准(或自定义,您应该随意实现某些特定提供者)角色/成员资格提供程序来实现。在客户端进行身份验证后,它会收到服务器生成的会话令牌(例如guid)。服务器端数据库中的相同guid存储(例如,在存储所有角色,用户等的数据库中) 每个会话令牌都已到期(使用DB agents / tasks / sheduler从数据库中删除过期的密钥) 因此,每次客户端请求某些资源时,它都会向服务器发送其会话令牌以及其他请求参数。在DB中接收到请求服务器搜索相同会话令牌之后,如果存在令牌,则提供对所请求资源的访问。否则验证失败。

自定义会话非常复杂,但同时也是处理身份验证操作的最安全方式。如果您对此有任何疑问,请随时问我。