WCF、RESTfulWeb服务和自定义身份验证如何实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (48)

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

我尝试了一切:

  1. 遵循本指南,只有发现所提议的认证机制是一个丑陋的黑客攻击。
  2. 安装WCF REST Starter Kit只是为了找出它已经过时并已被替换为另一个项目模板。
  3. 安装所述项目模板,只是为了找出它不提供任何自己的认证机制。
  4. 安装一个在传输级别提供自定义身份验证功能的IIS模块,只有找出我需要实施的一个MembershipProvider。(我只想提供一个UserNamePasswordValidator。)

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

提问于
用户回答回答于

当我调查如何为自己的WCF RESTful服务实现安全性时,我花了一些时间研究其他受欢迎的服务(如flickr和amazon)如何实现其自身的安全性 - 假设他们花费的时间比我想象的要多得多。Flickr的文档特别有助于塑造我的签名和请求。

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

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

  • 一个用户令牌
  • 时间戳
  • 教廷大使
  • 签名

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

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

  • apiKey
  • userToken
  • 秘密
  • 时间戳
  • 教廷大使

为了快速检查任何重放攻击,我将短时间存储在memcache实例中一段时间​​。在那段时间之后(大约10分钟),时间戳用于拒绝任何其他旧请求。

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

扫码关注云+社区