最近才开始使用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;
});
有人可以启发我:-)
谢谢
答案 0 :(得分:1)
要设置项目的同意屏幕并请求验证:
- 转到Google API控制台OAuth consent screen页。
- 添加必填信息,例如产品名称和支持电子邮件地址。
- 点击添加范围。
- 在出现的对话框中,选择项目使用的范围。敏感范围在API名称旁边显示一个锁定图标。
- 要选择注册范围,您需要从API和服务> API库启用API,例如云端硬盘或Gmail。
- 您必须选择项目使用的所有范围。
- 在向OAuth同意屏幕添加完详细信息后,点击提交验证。
- 显示需要验证窗口。
- 添加范围说明,联系电子邮件地址和任何其他可帮助团队进行验证的信息,然后单击“提交”。
注意:同意屏幕 控制台中的设置是在项目级别设置的,因此 您在“同意”屏幕页面上指定的信息适用于 整个项目。
因此,您需要在IdSrv中禁用对客户的同意并在Google中启用它。
此外,如this answer中所述,
根据设计,在只要求选择帐户和个人资料/电子邮件范围的情况下,同意屏幕不会显示在场景中 ...,因为帐户选择界面已经显示了电子邮件和个人资料(名称/图片)信息将与该应用共享。
由@Mike Wilcox添加:
当包含敏感/受限范围时,如果未针对添加的范围进行验证,则在同意oauth流程中会看到未验证屏幕。您可以通过点击高级->转到[app_name](不安全)
有一个游乐场:https://developers.google.com/oauthplayground/,您可以在这里进行测试。
单击右上角的设置图标,然后检查“使用您自己的OAuth凭据” 框,然后输入您的应用凭据。您可以添加范围并在那里进行测试。
答案 1 :(得分:0)
当重定向到外部idp时,您将无法控制,因为它是委派的身份验证。我不知道Google如何实现其OAuth流程,但是以下原因可能是导致未显示同意屏幕的原因:
RequireConsent
标志设置为false,可以在IDS4中实现此功能,但我怀疑您可以作为第三方OAuth客户端在Google中进行此操作)