征求反馈:使用多个端点进行多步API身份验证

时间:2018-11-03 02:30:53

标签: api authentication architecture microservices api-design

我正在构建一个API,该API将使用以下流程进行身份验证。

端点:

  • WWW:/login-这是使用JS ajax调用的HTML5前端
  • API:/check_password-检查电子邮件/密码组合。
  • API:/check_otp-为用户检查OTP(一次性密码)。
  • API:/login-设置身份验证会话cookie

假设:

  • API:/check_otp将始终且仅在API:/check_password之后被调用。
  • 忽略CSRF攻击和XSS攻击。
  • 即使前端(WWW:/ login)是恶意的,该API也只能使用有效的凭据和/或action_tokens
  • 我知道OAuth2,JWT和RESTful API。我的问题不是关于RESTful API。

登录时,流程如下:

  • WWW:/loginAPI:/check_password提交电子邮件和密码。
  • 如果凭据有效,则API:/check_password将返回action_tokenmfa_status(代表多因素身份验证)。

    • 如果mfa_status为0,则表示未启用MFA。
    • 如果mfa_status为1,则表示已启用MFA。
  • 如果为(mfa_status === 1),则WWW:/登录将调用API:/check_otp,并将从action_token收到的API:/check_password以及OTP传递给它。

    • 如果OTP和action_token有效,则API:/check_otp将返回一个新的action_token
  • 如果(mfa_status === 0)API:/check_otp返回有效的action_token,则WWW:/login将调用API:/login并将其传递给email和{{ 1}}。

对我来说,这意味着前端不需要在其数据存储中的任何位置(localstorage,indexeddb等)保存密码或OTP。这也意味着它可以立即从其数据存储区中删除action_token

问题:

  1. 这安全吗?
  2. 这种逻辑是否有缺陷?
  3. 我想念什么吗?

非常感谢您进行了有趣而透彻的讨论!

1 个答案:

答案 0 :(得分:0)

您的模式直接映射到OAuth2,为什么不使用经过验证的安全模式(如OAuth2)?您由于某种原因试图对其进行重建...您的action_token与OAuth访问令牌相同。

此外,您将需要保留访问令牌以用于随后对受保护资源的调用(就像OAuth一样)...

您所要做的就是不使用现成的OAuth库,也不进行混淆处理以使下一个人与您一起更新此代码,从而为自己做更多的工作。