我正在实现一个REST API,它既包含移动应用程序,也包含基于浏览器的客户端和用户。基于我在此处以及在security.stackexchange中提出的问题以及之前的问题,我得出的结论是,尽可能长时间保持“RESTful”,SSL基本身份验证对于身份验证已足够。问题是我还想实现双因素身份验证。是否可以在401 Authorization标头响应中添加标头,例如username:password:token,或者在完全独立的请求标头中,但在与客户端的基本auth响应相同的有效负载中?由于我正在使用node.js + express / connect,因此我可以访问整个HTTP协议堆栈,但出于可伸缩性的考虑,希望保持尽可能安静。在浏览器方面,我想我可以做基本的身份验证,如果它通过,请求TFA令牌,并且只有在它通过时才考虑用户进行身份验证。
答案 0 :(得分:6)
从技术上讲,您可以构建新的身份验证方案,以便从HTTP Basic Auth扩展,但它们通常不会受到浏览器的支持。在您的示例中,我不相信任何浏览器都能够原生地要求并发送用户名:密码:令牌,就像他们可以轻松询问用户名和密码一样。
通常,双因素身份验证方案的工作方式是使用某种形式的会话将用户置于中间状态,如第二个示例中所述。已通过第一个因素的用户,通过Basic Auth说出用户名/密码,会话已打开但未标记为真正登录,直到他们也传递第二个因子。输入加密狗代码或类似的东西。一旦两个因素都通过,他们的会话就会被标记为完全登录,他们可以访问他们的帐户/数据/其他任何内容。