当前位置:  开发笔记 > 运维 > 正文

如何使用2因子身份验证(2FA)设计无状态REST登录?

如何解决《如何使用2因子身份验证(2FA)设计无状态REST登录?》经验,为你挑选了1个好方法。

我正在努力解决如何使用多因素身份验证设计无状态RESTful身份验证API的概念.

几乎按照定义,2FA的需要需要多个状态; 使用用户名/密码登录,然后提交"代码"(TOTP,SMS代码,验证问题的答案等).这进一步意味着某种有限状态机(FSM).

据我所知,为维持无状态机制而存在的唯一选择是:

    客户端在提交数据以转换到下一个状态时必须传输一些状态信息(例如:当前的FSM状态),

    状态必须保持在服务器端,

    客户端必须在每次请求时传输所有数据,以使其达到当前状态

显然,传输所有数据是荒谬的.因此,这意味着在请求中传输状态信息(不透明或其他)或在服务器上维护状态.

还是有其他一些我缺少的技术?



1> Eric B...:

我添加了我想出的解决方案,以防将来对其他人有好处。请注意,在这种情况下,PVQ代表“个人验证问题”(即:基于知识的身份验证)。

最后,我设计了登录端点,要求:

授权标头(这是2FA令牌): Authorization: authType=”PVQ” token=”

用户名

密码

如果Authorization缺少标头,则端点返回401并设置WWW-Authenticate标头,指示登录需要2FA令牌(即:Authorization标头)。参数可以是PVQ,SMS,TOTP等(基于用户的配置)

WWW-Authenticate : authType="PVQ"

如果客户端收到401 / WWW-Authenticate响应,则它有责任调用2FA端点:

挑战/获取(接收挑战令牌)

客户:发送用户名/密码

服务器:以ID响应,或者

一个问题(PVQ),

或只是通过第三方短信提供商发送发送短信代码

质询/验证(接收Authorization标头所需的2FA令牌)

客户:发送

收到的ID challenge/get

用户名密码

应对挑战(即:对PVQ,SMS代码或TOTP代码的文字回答)

服务器:退货

2FA令牌值

客户端现在可以使用所需的用户名/密码/身份验证令牌来调用登录端点。

最后,没有说客户端返回服务器的“状态”,但是要权衡的是,必须将用户名/密码组合发送到2FA子系统的每个请求。

在服务器端,在发送给用户的SMS代码或PVQ问题的上下文中,有一些状态信息存储在数据库中,以及临时身份验证2FA令牌(单次使用和固定的TTL)。

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有