我们正在使用WCF构建一个RESTful API(目前是.Net 3.5,但很快就会转向.Net 4)。我们有一个功能框架,但它目前没有安全保障。它需要可以从.Net应用程序以及iOS,Android和Web应用程序访问。
我们希望使用描述为here和here的HMAC身份验证方案,但在描述如何验证哈希时,这两个示例似乎都分崩离析。第一个示例无法描述 UserKeys 对象(哈希表?),第二个示例缺少客户端和服务器端的 GetUserKey 方法。
任何人都可以解释如何在这些示例中生成/存储/检索/使用“用户密钥”/令牌,或者提供如何在RESTful中使用HMAC授权的更好示例(如果可能的话,还有源代码) WCF服务?
修改 经过更多的研究,我们确定我们需要更多的“Authorization”技术而不是“Authentication”技术(语义?)。我们实施了Basic Authorization 并保护了SSL背后的API。基本授权使用与Web请求相同的“授权”标头作为HMAC 身份验证方案,但是传递用Base64编码的用户名:密码字符串而不是令牌。这允许我们根据数据库自定义验证用户,以确定用户是否获得许可并具有访问所需API方法的适当安全权限。
我们当然愿意听取有关如何完成自定义用户名/密码验证的其他选项以及其他保护API的方法。
答案 0 :(得分:16)
检索用户密钥只是您可以以任何方式执行的实现细节,但在服务器上,它通常与用户名一起存储在数据库中。
基本方法非常简单。
真正唯一棘手的部分是与用户共享密钥并保持安全。这就是为什么某些服务允许在有限的生命周期内生成共享密钥的原因,因此您可以将密钥提供给第三方以代表您临时工作。
答案 1 :(得分:3)
我们可以在
找到HMAC的实施