当前位置: 首页 > 知识库问答 >
问题:

为Google OAuth2同意屏幕预选帐户,以防止重复选择帐户

柯永福
2023-03-14

在我的 Web 应用程序中,我想实现以程

  1. 用户点击使用Google按钮登录
  2. 用户在重定向屏幕中选择帐户
  3. 我收到一个JWT,其中包含帐户ID和电子邮件地址
  4. 我将帐户ID设置为登录提示,并仅设置“同意”提示
  5. 我创建Auth URL并再次重定向到Google以获得同意
  6. 在下一个同意屏幕中,用户应该只需要批准同意,而不是第二次选择他的帐户
  7. 我处理来自同意的回调

根据文档,我实现了“使用Google按钮登录”的回调,如下所示:;

$payload = $client->verifyIdToken($id_token); //Process  the JWT
if ($payload) {
    $userid = $payload['sub']; //Get the user's unique Google ID
    $client->setLoginHint($userid); //Set the user ID as hint for next consent
    $client->setPrompt('consent'); //Set the approval prompt to consent only
    $client->setScopes(...);
    $client->setAccessType('offline');
    $client->setRedirectUri(...);

    //Create auth URL for consent
    $auth_url = $client->createAuthUrl();
    header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));

https://developers.google.com/identity/protocols/oauth2/web-server#creatingclient

观察到的行为:

  1. 用户点击使用谷歌登录按钮
  2. 用户点击帐户

我如何正确地实现这个OAuth2同意,以便我不必要求用户选择他的帐户2次?

共有1个答案

边意
2023-03-14

显然,文件是不正确的。login_hint的说明:

如果您的应用知道哪个用户正在尝试进行身份验证,则可以使用此参数向 Google 身份验证服务器提供提示。服务器使用提示通过预填充登录表单中的电子邮件字段或选择适当的多登录会话来简化登录流程。

将参数值设置为电子邮件地址或子标识符,其等同于用户的Google ID。

根据这个语句,用户ID(用$payload[' sub '],从JWT获得)可以作为一个参数传递,但这似乎不起作用。

当将其更改为实际电子邮件地址(使用$payload['email']从JWT获取)时,它确实有效,并跳过第二个帐户选择屏幕(观察到的行为中的步骤4)。

 类似资料:
  • 所以我已经在我的React应用中使用AWS Amplify (federatedSignIn)实现了Google认证。显然,我想让谷歌帐户选择器屏幕强制用户选择一个帐户登录。显然,它只有在有多个谷歌账户可供选择时才起作用,但如果只有一个账户,系统会自动使用它登录? 如何在只有一个帐户的情况下强制执行选择屏幕?

  • 有没有办法,我可以强制谷歌帐户选择器显示,即使用户只用一个帐户登录。 我已尝试重定向到此 URL: 它似乎有效,但我不知道是否有任何其他条件可能会失败。

  • 我正在实现google驱动器使用google play服务。我从api控制台启用驱动器Api和驱动器SDK,并实现了驱动器SDK的配置设置,但是当我尝试从我的应用程序登录时,我得到以下错误,在指定帐户中签名错误。请选择不同的帐户,我添加了另一个帐户但面临相同的错误,我不知道是什么问题?我必须添加测试用户吗?但是我没有找到任何地方来测试用户。在身份验证部分(https://developers.go

  • 我的应用程序中有以下工作流: 用户登录我的自定义应用程序 用户点击一个按钮链接他们的YouTube帐户 应用程序使用下面的代码列表发出服务器端请求 用户被重定向到google auth url 此时,发生了两件事之一: [我从来不想要这种行为] - 如果用户只登录了一个谷歌帐户(即mail,谷歌域名应用套件等),则永远不会要求用户选择要链接的帐户。它只是假设他们想要使用他们登录的那个,并继续其快乐

  • 为了防止在数据库中输入重复的用户名并通知用户,在插入时使用异常捕获或在插入前选择查询是否更标准/更可取? > 异常捕获:如果我尝试插入用户输入,并且用户名已经存在,那么SQL数据库将抛出主键约束违反异常。如果发生这种情况,我可以抓住它,做任何事。 selectquery:如果它返回任何与用户名匹配的元组,那么我就不需要插入了。然后我可以显示错误消息。 我想这里使用异常的主要优点是查询和行更少(速度

  • 当使用OAuth2登录我们的应用时,常规的Google(即。gmail)帐户会出现一次同意屏幕,然后不再提示。当我使用我们基于Google Apps的Google帐户登录时,每次我都会看到同一个屏幕提示“您的域管理员已经批准访问X”。此外——同意屏幕上有我的谷歌头像的巨幅(512x512)图像。 关于为什么这些是不同的,有什么见解吗? 我正在请求以下范围 [“配置文件”、“电子邮件”、] ,并且已