为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
SMILET 2022-06-17 15:32:12
我正在为预订平台构建一个网络应用程序,我正在使用 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=12302 https://other_app_provider/auth/?_account_id=12302 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我再说一遍,授权和回调之间没有批准屏幕。我的问题:如何使用授权码流或隐式流静默认证用户?换句话说,如何模仿上述行为?谢谢你的回答!
查看完整描述

2 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

我可以先问几个问题 - 看看我是否理解这个场景:

  • 用户是否首先登录主机应用程序 X,然后您的应用程序作为插件加载?

  • 这是不同公司搭建主机和插件的联合场景吗?

  • 主机和插件是否使用相同的授权服务器,或者它们是具有不同用户凭据的不同登录系统。

避免同意提示可能就像在 Authorizatiom Server 中的应用程序的 OAuth 客户端条目中关闭此设置一样简单

值得注意的是,由于点击劫持问题,iframe 中的 OAuth 登录经常被阻止,更可靠的选择是使用弹出窗口进行插件登录。

在某些情况下,实现使解决方案感觉像单个集成 UI 的预期行为可能非常困难或不可能 - 但您的要求正变得非常普遍。


查看完整回答
反对 回复 2022-06-17
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

我找到了解决方案:

account_idX 授权服务器中有一个选项没有很好的记录:

预先选择要授权的帐户

调用您的管理 URL 时,我们传递参数_account_id。该参数的值可以作为account_id授权过程中的参数。这样做将在使用授权码流或隐式流时预先选择要授权的帐户。

account_id所以我可以通过在授权url中传递参数来模仿问题中描述的行为。

现在,我理解了Pre-Select by 一词:

检查帐户所有者是否连接到主机应用程序,选择其帐户并在应用程序中静默验证帐户所有者,如果它是已批准的帐户。

如果我在网络开发者工具中没有看到,那是因为它们是由 X 提供的,所以可能 X 使用 cookie/session 来预先选择要授权的帐户。我必须安装第三方应用程序才能看到account_id授权 url 中的参数。

谢谢您的回答 !


查看完整回答
反对 回复 2022-06-17
  • 2 回答
  • 0 关注
  • 252 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号