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

时间:2019-04-17 09:13:58

标签: oauth-2.0 identityserver4 google-authentication oidc

最近才开始使用IdentityServer4(IS4)来处理示例等。

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

我知道,由于我还需要用户的同意才能访问我的API,所以我可能会看到2个同意屏幕(一个用于访问Google的个人资料信息,另一个用于通过我自己的IS4配置访问API),但是如果我在我的设置中没有API,只想在联合设置中使用IS4提供ID令牌,我不需要我自己的API的同意,因此期望只看到外部供应商的同意屏幕(例如Google,Facebook,Twitter等)。

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

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

有人可以启发我:-)

谢谢

2 个答案:

答案 0 :(得分:1)

From Google' help

  

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

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

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

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

此外,如this answer中所述,

  

根据设计,在只要求选择帐户和个人资料/电子邮件范围的情况下,同意屏幕不会显示在场景中 ...,因为帐户选择界面已经显示了电子邮件和个人资料(名称/图片)信息将与该应用共享。

@Mike Wilcox添加:

  

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

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

答案 1 :(得分:0)

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

  • 您没有请求任何需要用户同意的范围
  • 用户已经同意将其信息访问给您的客户(您应该能够在Google帐户页面中进行检查)
  • 您的客户端已配置为绕过同意屏幕(通过将RequireConsent标志设置为false,可以在IDS4中实现此功能,但我怀疑您可以作为第三方OAuth客户端在Google中进行此操作)