gpt4 book ai didi

rest - 如何设计具有 2 因素身份验证 (2FA) 的无状态 REST 登录?

转载 作者:行者123 更新时间:2023-12-04 11:48:19 26 4
gpt4 key购买 nike

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

几乎根据定义,2FA 需要多个状态;使用用户名/密码登录,然后提交“代码”(TOTP、SMS 代码、验证问题的答案等)。这进一步暗示了某种有限状态机(FSM)。

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

  • 客户端在提交数据以转换到下一个状态时,必须传输一些状态信息(例如:当前 FSM 状态),
  • 状态必须在服务器端持久化,
  • 客户端必须在每次请求时传输所有数据以使其达到当前状态

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

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

    最佳答案

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

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

  • 授权 header (这是一个 2FA token ):Authorization: authType=”PVQ”
    token=”<tokenid>”
  • 用户名
  • 密码

  • 如果 Authorization header 丢失,端点返回 401 并设置 WWW-Authenticate header ,表明需要一个 2FA token (即:授权 header )才能登录。参数可以是 PVQ、SMS、TOTP 等(根据用户的配置)
    WWW-Authenticate : authType="PVQ"

    如果客户端收到 401/WWW-Authenticate 响应,它负责调用 2FA 端点:
  • 挑战/获得(接收挑战 token )
  • 客户端:发送用户名/密码
  • 服务器:响应一个 ID,或者
  • 一个问题(PVQ),
  • 或者只是通过第三方短信提供商发送短信代码
  • 挑战/验证(接收 Authorization header 所需的 2FA token )
  • 客户端:发送
  • challenge/get 中收到的 ID
  • 用户名/密码
  • 对质询的响应(即:对 PVQ、SMS 代码或 TOTP 代码的文本回答)
  • 服务器:返回
  • 2FA 代币值(value)

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

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

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

    关于rest - 如何设计具有 2 因素身份验证 (2FA) 的无状态 REST 登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41814194/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com