IdentityServer4:如何显示外部提供商同意屏幕?

问题描述 投票:1回答:2

刚刚开始使用IdentityServer4(IS4)播放样本等等。

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

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

我的外部提供程序配置如下:

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

请有人请赐教:-)

谢谢

oauth-2.0 identityserver4 google-authentication oidc
2个回答
1
投票

From Google' help

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

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

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

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

另外,如this answer所述,

根据设计,同意屏幕未显示在仅请求帐户选择和配置文件/电子邮件范围的方案中...,因为帐户选择UI已显示将与应用程序共享的电子邮件和配置文件(名称/图片)信息。

@Mike Wilcox补充说:

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

有一个游乐场:https://developers.google.com/oauthplayground/,你可以测试这个。 单击右上角的设置图标,然后选中“使用您自己的OAuth凭据”框,然后输入您的应用信用。您可以添加范围并在那里进行测试。


0
投票

当您重定向到外部idp时,您无法控制,因为它是委派的身份验证。我不知道Google如何实施他们的OAuth流程,但以下可能是为什么不显示同意屏幕的原因:

  • 您没有要求任何需要用户同意的范围
  • 用户已经同意向您的客户访问他/她的信息(您应该可以在Google帐户页面中查看此信息)
  • 您的客户端配置为绕过同意屏幕(这可以通过将RequireConsent标志设置为false来在IDS4中实现,但我怀疑您可以在Google中将其作为第三方OAuth客户端执行此操作)
© www.soinside.com 2019 - 2024. All rights reserved.