首页 > 解决方案 > IdentityServer4 的 SSO,授权类型为“authorization_code”

问题描述

我们处于这样一个场景中,我们自己开发的单页应用程序(AngularJS 前端,后面带有 https 服务器 API)在新的浏览器选项卡中打开了我们的合作伙伴开发的另一个 Web 应用程序,而这第二个 Web 应用程序需要访问同样由我们开发的 https 服务器 API。

在寻找可能的解决方案之后,我们现在使用 IdentityServer4 创建了一个概念证明,其中第二个 Web 应用程序被配置为具有“authorization_code”授权类型的客户端。当所有应用程序都在同一个域上运行时,第三方应用程序能够访问我们的 https 服务器 API,而不会被提示输入用户 ID 和密码。

在这个概念证明中第二个 Web 应用程序的实现非常类似于bayardw 为帖子提供的解决方案

Identity Server 4 授权代码流程示例

我现在的问题是:

当 - 在生产中 - 第二个 Web 应用程序不再与我们的应用程序和我们的 https 服务器 API 共享域时,在访问我们的 http 服务器 API 时,是否会提示来自第二个 Web 应用程序的调用输入用户名和密码?

标签: oauth-2.0identityserver4

解决方案


看来,你错过了一些重要的事情。
首先,任何 API 都不应该询问用户名和密码。相反,您的应用程序应该在每个请求中放置一个令牌,并且 API 应该验证该令牌。当用户访问您的(或第 3 方)Web 应用程序时,应该询问用户凭据。然后身份提供者创建一个身份令牌(通常保存在 cookie 中并在应用程序中使用)和访问令牌(提供给 API)。
每个令牌都是为在 IdP 中预先注册的特定客户端(应用程序)颁发的。
可能当托管在同一个域中时,您的两个应用程序共享身份 cookie 和客户端 ID,这是不正确的。
在生产场景中,您必须单独注册应用程序。其余的都应该可以正常工作(如果您遵循我在开头简要描述的例程)。


推荐阅读