首页 > 解决方案 > IdentityServer4:如何显示外部提供商同意屏幕?

问题描述

刚刚开始使用 IdentityServer4 (IS4) 玩弄样本等等。

我有一个运行 IS4(使用包含的示例 UI MVC)的设置,将 Google 配置为外部提供程序。我也有一个 API 设置,以及一个客户端(MVC Web 应用程序)。进行身份验证时,用户在“外部登录”部分单击“Google”,他/她将按预期重定向到 Google。但是,在提供用户名和密码后,我希望看到 Google 同意屏幕,但我被重定向回 IS4 中的同意屏幕。这是为什么?最终用户是否应该在一个明显来自 Google 的页面(即 HTTPS 和 Google 证书)上不同意他/她的 Google 个人资料信息正在被访问?

我承认,由于我还需要用户同意才能访问我的 API,我最终可能会看到 2 个同意屏幕(一个用于来自 Google 的个人资料信息,另一个用于来自我自己的 IS4 配置的 API 访问),但如果我没有我的设置中有一个 API,只是想在联合设置中使用 IS4 来提供 ID 令牌,我不需要我自己的 API 的同意,因此只希望看到来自我的外部提供商(例如谷歌)的同意屏幕、脸书、推特等)。

我的外部提供商配置如下:

services.AddAuthentication()
    .AddGoogle("Google", options =>
    {
        options.ClientId = "<my client id>";
        options.ClientSecret = "<my client secret>";
        options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
    });

有人可以启发我:-)

谢谢

标签: oauth-2.0identityserver4google-authenticationopenid-connect

解决方案


来自谷歌的帮助

要设置项目的同意屏幕并请求验证:

  1. 转到 Google API 控制台OAuth 同意屏幕页面。
  2. 添加所需的信息,例如产品名称和支持电子邮件地址。
  3. 单击添加范围
  4. 在出现的对话框中,选择您的项目使用的范围。敏感范围会在 API 名称旁边显示一个锁定图标。
    • 要选择注册范围,您需要从 APIs & Services > API Library 启用 API,例如 Drive 或 Gmail。
    • 您必须选择项目使用的所有范围。
  5. 将详细信息添加到 OAuth 同意屏幕后,单击提交以进行验证
  6. 显示需要验证窗口。
  7. 添加范围说明、联系电子邮件地址和任何其他可以帮助团队进行验证的信息,然后单击提交。

注意:控制台中的同意屏幕设置是在项目级别设置的,因此您在同意屏幕页面上指定的信息适用于整个项目。

因此,您需要在 IdSrv 中为您的客户禁用同意并在 Google 中启用它。

此外,如本答案中所述,

根据设计,仅请求帐户选择和个人资料/电子邮件范围的场景中不会显示同意屏幕...,因为帐户选择 UI 已经显示将与应用程序共享的电子邮件和个人资料(姓名/图片)信息.

正如@Mike Wilcox添加的那样:

包含敏感/受限范围时,如果未对添加的范围进行验证,您将在同意 oauth 流程中看到未验证屏幕。你可以通过点击高级->转到[app_name](不安全)

There is a playground: https://developers.google.com/oauthplayground/ where you can test this out.
Click on the settings icon in the top right and then check the "Use your own OAuth Credentials" box to then enter your app creds. You can add scopes and test out there.


推荐阅读