在与Web API服务通信的html / knockout js应用程序中进行身份验证

时间:2013-06-18 07:19:34

标签: rest asp.net-web-api security

我们正在构建一个将HTML和knockoutjs用作客户端的应用程序。这将使用ajax调用与服务器端的WepApi服务进行通信。

我已经开始研究这方面的安全方面,似乎没有任何开箱即用的解决方案来验证用户与服务器进行此类RESTful通信。我们需要的不仅仅是基本身份验证,而且我已经看过HMAC,这似乎是一个很好的解决方案,但我不明白用户在这种情况下如何获取私钥?

任何人都可以指出通常为此类系统实施的良好模式或实践的建议

由于

1 个答案:

答案 0 :(得分:2)

对于基于HMAC的身份验证,Eran Hammer有一个hawk计划。这是Pablo的.NET实现。我最近也创建了一个,在bitbucket中可用,但我的仅用于ASP.NET Web API。

使用基于HMAC的JavaScript的问题是,您的JavaScript必须能够访问共享密钥,这可能是也可能不是,这取决于您的需求。基于HMAC的解决方案通常使用共享对称密钥,这意味着发送方和接收方共享相同的密钥,用于创建HMAC以供另一端验证。这不完全是公钥 - 私钥的非对称密钥对。

基于HMAC的解决方案的替代方案是使用身份验证代理,该代理将发出可用于向Web API进行身份验证的JWT等令牌。令牌的优点是它通常与密钥或用户ID /密码相比是短暂的。在这里,您可以使用OAuth 2.0的隐式授权流程,也可以不使用任何标准协议,只需执行POST或类似操作即可从颁发者处获取令牌。在滚动自己的东西之前,您可以尝试重用现有的实现,例如thinktecture identity server