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

pyo*_*yon 17 wcf restful-authentication

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

我尝试了一切:

  1. 遵循本指南,只是发现建议的身份验证机制是一个丑陋的黑客.

  2. 安装WCF REST入门工具包,仅发现它已过时并已被其他项目模板替换.

  3. 安装所说的项目模板,却发现它没有提供自己的任何认证机制.

  4. 安装一个IIS模块,在传输级别提供自定义身份验证功能,但只能找出作者提供的零文档.只是发现我需要实现一个MembershipProvider.(我只想提供一个UserNamePasswordValidator.)

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

efa*_*ner 10

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

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

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

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

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

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

  • apikey
  • userToken
  • 秘密
  • 时间戳
  • 现时

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

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