遵循 Auth0 Redirect Users from rules 的这篇文章,我们的应用程序中有以下场景:
- 用户尝试登录
- 对于某些特定条件,它们可能被重定向到询问挑战问题的端点
如果回答正确,身份验证机制将恢复使用提到的 URL:
domain/continue?state=STATE_GENERATED
我们构建了一个示例应用程序,可以很好地解决一个问题。 Auth0生成的‘状态’可以被用户看到;无论是在重定向中还是在浏览器的网络选项卡中。
因此我们尝试了以下方法:
登录 -> 重定向到挑战问题(状态附加到网址) -> 我们没有继续,但复制了状态并在浏览器中启动了简历网址:
https://DOMAIN.auth0.com/continue?state=THE_ORIGINAL_STATE
在同一个浏览器中,它使用 token 重定向到我们的应用程序。用户可以缓解此类挑战问题。
在使用规则和从规则重定向来完成多因素身份验证的类似流程中,保护“状态”的最佳实践/推荐方法是什么?
最佳答案
状态
用于防止身份验证中的 CSFR,您不能使用它来确保用户已在您的“挑战问题”页面上完成某些操作。您应该简单地传递状态。
您需要做的是使用共享 key 生成一个 token ,该 token 可以从质询问题页面传递到规则,以便对其进行验证。基本上,您可以做的是,在用户正确回答问题后,您可以使用质询页面服务器和规则都知道的 secret 生成 JWT token 。 JWT token 可以是任何内容,例如它可以包含类似 {challenge_success: true }
的内容。
生成 token 后,您将重定向回:
https://DOMAIN.auth0.com/continue?state=THE_ORIGINAL_STATE&token=GENERATED_JWT
然后在规则中您读取并验证 token
并检查声明是否符合您的预期。
您可以在此处查看其工作原理的完整示例:https://auth0.com/docs/rules/current/redirect#how-to-securely-process-results
关于Auth0:从规则重定向,如何保护状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46083896/