Auth0:如何在托管登录页面中启用静默身份验证?

Mih*_*hir 6 oauth single-sign-on oauth-2.0 auth0

我正在使用 Auth0 的托管屏幕。我希望以下场景起作用-

  • 假设我有 2 个应用程序 - app1 和 app2。
  • 通过在 app1 中提供电子邮件+密码登录的用户之一。
  • 然后用户导航到 app2。
  • Auth0 检测到用户已经登录,因此它将用户重定向回 app2,而无需再次登录。

但我面对的是这个画面——

Auth0 锁屏

我怎样才能保存我的用户这个额外的点击?如何实现静默身份验证?我知道你要传递prompt=none/authorizeAPI,但是因为我没有手动调用API,如何让我的锁通话/authorizeprompt=none

Ald*_*uca 6

您想要的是无声 SSO,它与 SSO 相关但又是独立的。

关键在prompt参数中。这是none为了当用户已经登录 Auth0 的授权服务器(“中央 SSO”)时,不会提示用户登录。

我发现的一件烦人的事情prompt是从字面上理解,因此如果用户尚未登录,则不会提示他登录(您认为在未登录时提示用户是否有意义?)。

在这种情况下,SSO 将重定向到您的应用程序/authorize,并显示“需要身份验证”之类的错误,您必须通过/login再次将用户重定向到您的端点来处理它,但要传递,prompt=true以便它知道这次他必须传递prompt=true给 Auth0 的托管登录页面。

为了让事情变得更难看,目前passport-auth0-openidconnect似乎忽略了您传递给策略的参数,除非您修补所涉及的方法之一(我为它创建了一个 PR,不要在何时批准和/或是否有意义)。

本质上:

  • 经过 prompt=none
  • 如果用户已经登录,他也会以静默方式登录您的应用
  • 如果用户未登录,用户将被重定向到您的应用并显示“需要登录”错误
    • 在这种情况下,你必须通过 prompt=true

我知道这有点繁琐,但我希望这对您有所帮助:)

PS:另一件要记住的事情 - 我现在才发现它在使用 Github 作为连接时可以完美运行,但是在使用google-oauth2它时会抱怨prompt参数 :|