Eri*_* B. 7 authentication rest stateless
我正在努力解决如何使用多因素身份验证设计无状态RESTful身份验证API的概念.
几乎按照定义,2FA的需要需要多个状态; 使用用户名/密码登录,然后提交"代码"(TOTP,SMS代码,验证问题的答案等).这进一步意味着某种有限状态机(FSM).
据我所知,为维持无状态机制而存在的唯一选择是:
显然,传输所有数据是荒谬的.因此,这意味着在请求中传输状态信息(不透明或其他)或在服务器上维护状态.
还是有其他一些我缺少的技术?
我添加了我想出的解决方案,以防将来对其他人有好处。请注意,在这种情况下,PVQ代表“个人验证问题”(即:基于知识的身份验证)。
最后,我设计了登录端点,要求:
Authorization: authType=”PVQ”
token=”<tokenid>”如果Authorization缺少标头,则端点返回401并设置WWW-Authenticate标头,指示登录需要2FA令牌(即:Authorization标头)。参数可以是PVQ,SMS,TOTP等(基于用户的配置)
WWW-Authenticate : authType="PVQ"
Run Code Online (Sandbox Code Playgroud)
如果客户端收到401 / WWW-Authenticate响应,则它有责任调用2FA端点:
挑战/获取(接收挑战令牌)
质询/验证(接收Authorization标头所需的2FA令牌)
challenge/get客户端现在可以使用所需的用户名/密码/身份验证令牌来调用登录端点。
最后,没有说客户端返回服务器的“状态”,但是要权衡的是,必须将用户名/密码组合发送到2FA子系统的每个请求。
在服务器端,在发送给用户的SMS代码或PVQ问题的上下文中,有一些状态信息存储在数据库中,以及临时身份验证2FA令牌(单次使用和固定的TTL)。
| 归档时间: |
|
| 查看次数: |
2785 次 |
| 最近记录: |