在我的 webapp 中,我想实现以下流程
- 用户单击使用 Google 登录按钮
- 用户在重定向屏幕中选择帐户
- 我收到带有帐户 ID 和电子邮件地址的 JWT
- 我将帐户 ID 设置为登录提示,并将提示设置为仅“同意”
- 我创建了 Auth URL 并再次重定向到 Google 以获得同意
- 在下一个同意屏幕中,用户应该只需要批准同意,而不是第二次选择他的帐户
- 我处理来自同意的回调
根据文档,我实现了“使用 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
观察到的行为:
- 用户点击使用 Google 登录按钮
- 用户点击账号&提供JWT
- 用户被重定向到同意屏幕
- 用户必须再次选择帐户 <-- 不需要的行为
- 用户同意同意
- 用户被重定向到回调
如何正确实施此 OAuth2 同意,以便我不必要求用户选择他的帐户 2 次?