WCF,RESTful Web服务和自定义身份验证

时间:2011-05-16 18:20:14

标签: wcf restful-authentication

我开始相信我是一个非常无能的程序员。经过大量阅读后,我仍然无法弄清楚如何干净地实现RESTful WCF服务的身份验证机制。

我已经尝试了一切:

  1. 关注this guide,只是发现建议的身份验证机制是一个丑陋的黑客攻击。

  2. 安装the WCF REST Starter Kit,但发现它已过时且已被其他项目模板替换。

  3. 安装said project template,但发现它没有提供任何自己的身份验证机制。

  4. 安装an IIS module that provides custom authentication functionality at transport level只是为了找出作者提供的零文档。只是为了找出我需要实现MembershipProvider。 (我只想提供UserNamePasswordValidator。)

  5. 是否有任何理智的方法来实现RESTful WCF服务的身份验证机制?

1 个答案:

答案 0 :(得分:10)

当我研究如何为我自己的WCF RESTful服务实现安全性时,我花了一些时间来研究其他流行服务如flickr和amazon如何实现自己的安全性 - 假设他们可能花费的时间远远超过了我有。 Flickr的documentation特别有助于塑造我签名和请求的形式。

最后,我为我的服务选择了HMAC(基于哈希的消息认证码)认证方案。

我创建了一个自定义HMAC ServiceAuthorizationManager,用于验证每个请求的签名。每个请求包含以下内容:

  • 用户令牌
  • 时间戳
  • nonce
  • 签名

使用此信息,经理可以从其令牌中查找用户的秘密,并可以使用提供的信息在服务器上重新创建签名。

我的签名包含以下MD5哈希值(值按特定顺序连接在一起并进行哈希处理,以便可以在服务器上重复该值):

  • apikey
  • userToken
  • 秘密
  • 时间戳
  • 随机数

我将nonce存储在memcache实例中一小段时间,以便快速检查任何重放攻击。在该时间偏差(大约10分钟)之后,时间戳用于拒绝任何其他旧请求。

如果有帮助,我可以发布我的代码的一些片段。总的来说,我发现HMAC身份验证通常是最安全的方式,并且很容易支持任何将使用您的服务的客户端(不仅仅是.NET)。

相关问题