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

Oauth 2.0 IdentityServer4:如何显示外部提供商同意屏幕?,oauth-2.0,identityserver4,google-authentication,openid-connect,Oauth 2.0,Identityserver4,Google Authentication,Openid Connect,最近刚开始使用IdentityServer4(IS4)处理示例等等 我有一个安装程序,其中运行IS4(使用附带的示例UI MVC),并将Google配置为外部提供者。我还有一个API设置和一个客户端(MVCWebapp)。进行身份验证时,用户单击“外部登录”部分中的“谷歌”,他/她将按预期重定向到谷歌。然而,在提供用户名和密码后,我希望看到Google同意屏幕,但是我被重定向回IS4中的同意屏幕。为什么呢?最终用户是否应该不同意在明显来自谷歌的页面上访问他/她的谷歌个人资料信息(即HTTPS和谷

最近刚开始使用IdentityServer4(IS4)处理示例等等

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

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

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

services.AddAuthentication()
.AddGoogle(“谷歌”,选项=>
{
options.ClientId=“”;
options.ClientSecret=“”;
options.signnscheme=IdentityServerConstants.ExternalCookieAuthenticationScheme;
});
有人能告诉我:-)


谢谢

当您重定向到外部idp时,您没有控制权,因为它是一个委托的身份验证。我不知道Google是如何实现其OAuth流的,但以下可能是未显示同意屏幕的原因:

  • 您没有请求任何需要用户同意的作用域
  • 用户已经同意向您的客户访问他/她的信息(您应该能够在Google帐户页面中查看此信息)
  • 您的客户端被配置为绕过同意屏幕(在IDS4中,可以通过将
    requiresent
    标志设置为false来实现这一点,但我怀疑您能否在Google中作为第三方OAuth客户端实现这一点)
    • 要设置项目的同意屏幕并请求验证,请执行以下操作:

    • 转到GoogleAPI控制台页面
    • 添加所需信息,如产品名称和支持电子邮件地址
    • 单击添加范围
    • 在出现的对话框中,选择项目使用的范围。敏感作用域在API名称旁边显示一个锁定图标。
      • 要选择要注册的作用域,您需要从API&Services>API库启用API,如Drive或Gmail
      • 必须选择项目使用的所有作用域
    • 完成向OAuth同意屏幕添加详细信息后,单击提交以进行验证
    • 将显示一个需要验证的窗口
    • 添加范围理由、联系人电子邮件地址和任何其他可帮助团队进行验证的信息,然后单击提交 注意:同意屏幕 控制台中的设置是在项目级别设置的,因此 在“同意”屏幕页面上指定的信息适用于 整个项目

      所以,您需要的是在IdSrv中禁用您的客户端同意,并在谷歌中启用它

      此外,如中所述

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

      由以下人员添加:

      当包含敏感/受限范围时,如果未对添加的范围进行验证,则在同意oauth流期间将看到未验证屏幕。您可以通过单击高级->转到[应用程序名称](不安全)


      这里有一个游乐场:您可以在这里进行测试。
      单击右上角的设置图标,然后选中“使用您自己的OAuth凭据”框,然后输入您的应用程序凭据。您可以添加作用域并在那里进行测试。

      这正是我所做的,只是我不需要Google中的任何API作用域(如Drive、Gmail等),只需要配置文件信息;所以我留下了3个标准范围(email、profile和openid)。然而,这似乎并没有触发同意屏幕。但正如it在提示文本中所说,“如果您添加敏感范围,…,谷歌将验证您的同意屏幕…”可能是我没有看到屏幕的原因。访问默认范围不需要同意是真的吗?而且,如果我添加了一个敏感范围,似乎我需要谷歌验证才能发布范围更改;我现在不想这样,因为我基本上只是在尝试。在测试床/沙箱环境中没有办法做到这一点吗?另请参阅不太新鲜,上次更新是在一年前,但仅此而已。当添加敏感/受限范围时,如果没有验证添加的范围,下面的回复中有google guy的一些扩展解释,在同意oauth流期间,您将看到未验证屏幕。您仍然可以通过单击高级->转到[app_name](不安全)来访问。您可以在一个操场上进行测试。单击右上角的设置图标,然后单击收音机“使用您自己的OAuth凭据”,然后输入您的应用程序凭据。您可以添加作用域并在那里进行测试。您的第一个项目可能就是这种情况(请参阅我对上面回复的评论)。但我真的不知道如何在没有havin的情况下请求需要同意的范围(即敏感范围)