我们正在构建一个使用 HTML 和 knockoutjs 作为客户端的应用程序。这将使用 ajax 调用与服务器端的 WepApi 服务进行通信。
我已经开始研究这方面的安全性,似乎没有任何开箱即用的解决方案来验证用户与服务器进行这种类型的 RESTful 通信。我们需要的不仅仅是基本身份验证,我已经查看了 HMAC,这似乎是一个很好的解决方案,但我不明白在这种情况下用户如何获取私钥?
任何人都可以提供通常为此类系统实施的良好模式或实践的指示、建议吗
谢谢
我们正在构建一个使用 HTML 和 knockoutjs 作为客户端的应用程序。这将使用 ajax 调用与服务器端的 WepApi 服务进行通信。
我已经开始研究这方面的安全性,似乎没有任何开箱即用的解决方案来验证用户与服务器进行这种类型的 RESTful 通信。我们需要的不仅仅是基本身份验证,我已经查看了 HMAC,这似乎是一个很好的解决方案,但我不明白在这种情况下用户如何获取私钥?
任何人都可以提供通常为此类系统实施的良好模式或实践的指示、建议吗
谢谢
对于基于 HMAC 的身份验证,Eran Hammer 有一个hawk方案。这是Pablo的 .NET 实现。我最近也创建了一个,在bitbucket中可用,但我的仅适用于 ASP.NET Web API。
将基于 HMAC 的东西与 JavaScript 一起使用的问题在于,您的 JavaScript 必须有权访问共享密钥,这可能是可取的,也可能不是可取的,具体取决于您的需要。基于 HMAC 的解决方案通常使用共享对称密钥,这意味着发送方和接收方共享相同的密钥,他们使用该密钥来创建 HMAC 以供另一端进行验证。这不完全是公钥-私钥的非对称密钥对。
基于 HMAC 的解决方案的替代方案是使用身份验证代理,该代理将发布诸如 JWT 之类的令牌,该令牌可用于对 Web API 进行身份验证。令牌的优点是它通常相对于密钥或用户 ID/密码来说是短暂的。在这里,您可以使用 OAuth 2.0 的隐式授权流程,也可以不使用任何标准协议,只需执行 POST 或类似的操作即可从颁发者处获取令牌。在推出自己的东西之前,您可以尝试重用现有的实现,例如thinktecture 身份服务器。