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