我正在使用直接的html 5和web api restful服务构建一个新的asp.net web api应用程序。我已经在使用表单身份验证和[Authorize]属性来保护我的web api调用。我正努力尽可能地遵守宁静的原则。
我正在模仿使用双因素身份验证并使用asp.net网络表单的现有应用程序。双因素身份验证不用于登录,而是用于通过站点和插件远程连接到另一台计算机的其他任务。
现有Web应用程序使用会话状态来存储生成并通过电子邮件发送给用户的PIN。然后,当用户输入引脚时,将检查处于会话状态的引脚。
所以看起来我的选择是......
那么这些选项中最好的选择是什么?还有其他可能性吗?
答案 0 :(得分:1)
我不是100%确定我理解您的架构,但似乎非常相关,您的安全性绝不应该依赖于客户端。
假设用户在他们的浏览器中有一个javascript调试器(大多数人实际上没有意识到),以及你的插件的自定义构建。
因此,辅助PIN质询应该在服务器端嵌入到“远程处理”协议中。 如果它是基于RDP或VNC的东西,应该可以动态地将给定用户的连接密码更改为一次性生成的PIN。
答案 1 :(得分:0)
我胆怯,你不应该过分关注RESTful原则(等等,我说的是什么?:))...你看,一方是理论而另一方是实践。在实践中,您经常需要打破RESTful原则以确保安全!让我们取nonce
- 它是为每个请求生成的一个大随机数,然后在服务器上检查,如果以前没有发送过相同的nonce
。这涉及存储状态(nonce) - 即,它不是无状态的,但它有时对安全性至关重要。此外,顺便说一句,经常使用的OAuth不是RESTful。
为了加密PIN,你不应该使用JavaScript客户端!您可以在使用域JavaScript客户端上实现某种加密端点,但是:
XMLHTTPRequest
生成对端点网址的请求(例如/api/encrypt
)。你的同事提出了一个很好的建议! Amazon是最好的REST API实现之一。