我正在构建一个API,该API将使用以下流程进行身份验证。
端点:
WWW:/login
-这是使用JS ajax调用的HTML5前端API:/check_password
-检查电子邮件/密码组合。API:/check_otp
-为用户检查OTP(一次性密码)。API:/login
-设置身份验证会话cookie 假设:
API:/check_otp
将始终且仅在API:/check_password
之后被调用。action_tokens
。登录时,流程如下:
WWW:/login
向API:/check_password
提交电子邮件和密码。如果凭据有效,则API:/check_password
将返回action_token
和mfa_status
(代表多因素身份验证)。
mfa_status
为0,则表示未启用MFA。 mfa_status
为1,则表示已启用MFA。如果为(mfa_status === 1)
,则WWW:/登录将调用API:/check_otp
,并将从action_token
收到的API:/check_password
以及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
。
问题:
非常感谢您进行了有趣而透彻的讨论!
答案 0 :(得分:0)
您的模式直接映射到OAuth2,为什么不使用经过验证的安全模式(如OAuth2)?您由于某种原因试图对其进行重建...您的action_token与OAuth访问令牌相同。
此外,您将需要保留访问令牌以用于随后对受保护资源的调用(就像OAuth一样)...
您所要做的就是不使用现成的OAuth库,也不进行混淆处理以使下一个人与您一起更新此代码,从而为自己做更多的工作。