如何使用 oauth2 静默登录用户?

我正在为预订平台构建一个网络应用程序,我正在使用 oauth2 来使用他们的API并验证用户。我的应用程序嵌入在我无法控制的另一个名为“X”的网站中。当用户点击我的应用程序时,它会加载https://localhost/?_account_id=12 到一个 iframe 中,该 iframe_account_id=12是它自己在 X 网站中的帐户 ID。

  • 我正在使用 oauth2授权代码流,以便用户批准我的应用程序。

  • 我正在安全地存储授权服务器提供的刷新令牌。

  • 我将account_id参数存储在会话中。

  • 授权服务器不支持著名的prompt=none.

  • 这是我第一次使用 oauth2,所以也许我没有正确理解 oauth2 的工作原理。

由于安全性,我不能只依赖_account_id参数,因此每次连接到我的应用程序时,我都需要对用户进行身份验证。这样做,每次会话到期时,应用都会提示用户批准我的应用。

对于 X 中可用的其他应用程序,我永远不会被提示重新批准这些应用程序。因此,在分析它们时,每次我连接到其他应用程序时,我的浏览器的网络开发工具都会列出这一点:

204 https://other_app_provider/fr/admin?_account_id=12

302 https://other_app_provider/auth/?_account_id=12

302 https://authorization_server/oauth/authorize?_account_id=12&client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&response_type=code&scope={SCOPES}&state={STATE}

302 https://other_app_provider/auth/bookingsync/callback?code={CODE}&state={STATE}

200 https://other_app_provider/admin

我再说一遍,授权和回调之间没有批准屏幕。

我的问题:如何使用授权码流隐式流静默认证用户?换句话说,如何模仿上述行为?

谢谢你的回答!


SMILET
浏览 253回答 2
2回答

精慕HU

我可以先问几个问题 - 看看我是否理解这个场景:用户是否首先登录主机应用程序 X,然后您的应用程序作为插件加载?这是不同公司搭建主机和插件的联合场景吗?主机和插件是否使用相同的授权服务器,或者它们是具有不同用户凭据的不同登录系统。避免同意提示可能就像在 Authorizatiom Server 中的应用程序的 OAuth 客户端条目中关闭此设置一样简单值得注意的是,由于点击劫持问题,iframe 中的 OAuth 登录经常被阻止,更可靠的选择是使用弹出窗口进行插件登录。在某些情况下,实现使解决方案感觉像单个集成 UI 的预期行为可能非常困难或不可能 - 但您的要求正变得非常普遍。

婷婷同学_

我找到了解决方案:account_idX 授权服务器中有一个选项没有很好的记录:预先选择要授权的帐户调用您的管理 URL 时,我们传递参数_account_id。该参数的值可以作为account_id授权过程中的参数。这样做将在使用授权码流或隐式流时预先选择要授权的帐户。account_id所以我可以通过在授权url中传递参数来模仿问题中描述的行为。现在,我理解了Pre-Select by 一词:检查帐户所有者是否连接到主机应用程序,选择其帐户并在应用程序中静默验证帐户所有者,如果它是已批准的帐户。如果我在网络开发者工具中没有看到,那是因为它们是由 X 提供的,所以可能 X 使用 cookie/session 来预先选择要授权的帐户。我必须安装第三方应用程序才能看到account_id授权 url 中的参数。谢谢您的回答 !
打开App,查看更多内容
随时随地看视频慕课网APP