如何使用 Firebase 提供自定义的第二因素身份验证?
How can I provide a custom second factor of authentication using Firebase?
我想为我的应用程序用户提供添加第二个身份验证因素的能力,我目前正在使用 Firebase 登录和登录新用户。 Firebase 已经允许您使用第二个因素,但您唯一的可能性是向经过验证的 phone 号码发送短信。我想用 Authy OneTouch 替换第二个因素,所以我想知道在这种情况下最好的做法是什么。
现在我是这样验证我的用户的:
- 用户使用我的客户端中的表单登录。在幕后,我正在使用
signInWithEmailAndPassword
,从 Firebase 检索 IDToken 并将持久性设置为 NONE
。
- 客户端向我的后端发送一个 post 请求,并在之后立即附加 IdToken 和
singOut
。
- 如果令牌有效,服务器将提供一个
HttpOnly
会话 cookie 来存储该令牌,该令牌将与未来的请求一起发送到我的后端以跟踪用户的身份验证状态。
我打算如何改变我的工作流程:
通过个人资料页面,用户可以选择也可以不选择第二个身份验证因素。
在用户选择加入后,我会向我的服务器发送请求,它会调用 setCustomUserClaims
附加自定义 mfa
声明并执行必要的步骤来注册Authy 上的新用户。
登录后,我访问了调用 getIdTokenResult
的声明并访问了 tokenResult.claims.mfa
。如果它不存在,那么该过程将按照前面的列表进行。否则,我会注销用户,要求 him/her 通过第二个因素,并定期轮询 Authy 提供的特定 URL 以获取有关第二个因素挑战状态的更新。
当我检测到第二个因素挑战已成功完成时,我向我的后端发送了一个 post 请求,附上我从 Firebase 获得的 idToken 和我从 Authy 的响应中获得的相关信息。
后端验证 idToken 是否有效(以确保之前执行过电子邮件密码质询),然后使用 [=] 使用 Firebase 用户的 uuid, email, password, mfa-status
生成自定义令牌19=],然后执行 signInWithCustomToken
并在响应中设置会话 cookie。
我的想法基本正确吗?万一 Firebase 提供了一种方法来自定义其默认的第二个因素而我只是错过了呢?谢谢。
虽然 Firebase Authentications 的付费兄弟 Google Cloud Identity Platform 确实提供 2FA with SMS,但它们目前都没有提供 use/require 用于验证用户身份的自定义第二因素的选项。
虽然这是一个常见的要求,所以我推荐 filing a feature request。
在将此功能添加到 Firebase 本身之前,您可以通过 custom provider 执行类似操作的唯一方法,它允许您(但也需要您)自己控制身份验证流程。
我想为我的应用程序用户提供添加第二个身份验证因素的能力,我目前正在使用 Firebase 登录和登录新用户。 Firebase 已经允许您使用第二个因素,但您唯一的可能性是向经过验证的 phone 号码发送短信。我想用 Authy OneTouch 替换第二个因素,所以我想知道在这种情况下最好的做法是什么。
现在我是这样验证我的用户的:
- 用户使用我的客户端中的表单登录。在幕后,我正在使用
signInWithEmailAndPassword
,从 Firebase 检索 IDToken 并将持久性设置为NONE
。 - 客户端向我的后端发送一个 post 请求,并在之后立即附加 IdToken 和
singOut
。 - 如果令牌有效,服务器将提供一个
HttpOnly
会话 cookie 来存储该令牌,该令牌将与未来的请求一起发送到我的后端以跟踪用户的身份验证状态。
我打算如何改变我的工作流程:
通过个人资料页面,用户可以选择也可以不选择第二个身份验证因素。
在用户选择加入后,我会向我的服务器发送请求,它会调用
setCustomUserClaims
附加自定义mfa
声明并执行必要的步骤来注册Authy 上的新用户。登录后,我访问了调用
getIdTokenResult
的声明并访问了tokenResult.claims.mfa
。如果它不存在,那么该过程将按照前面的列表进行。否则,我会注销用户,要求 him/her 通过第二个因素,并定期轮询 Authy 提供的特定 URL 以获取有关第二个因素挑战状态的更新。当我检测到第二个因素挑战已成功完成时,我向我的后端发送了一个 post 请求,附上我从 Firebase 获得的 idToken 和我从 Authy 的响应中获得的相关信息。
后端验证 idToken 是否有效(以确保之前执行过电子邮件密码质询),然后使用 [=] 使用 Firebase 用户的
uuid, email, password, mfa-status
生成自定义令牌19=],然后执行signInWithCustomToken
并在响应中设置会话 cookie。
我的想法基本正确吗?万一 Firebase 提供了一种方法来自定义其默认的第二个因素而我只是错过了呢?谢谢。
虽然 Firebase Authentications 的付费兄弟 Google Cloud Identity Platform 确实提供 2FA with SMS,但它们目前都没有提供 use/require 用于验证用户身份的自定义第二因素的选项。
虽然这是一个常见的要求,所以我推荐 filing a feature request。
在将此功能添加到 Firebase 本身之前,您可以通过 custom provider 执行类似操作的唯一方法,它允许您(但也需要您)自己控制身份验证流程。