oauth-2.0 - IdentityServer4 的 SSO,授权类型为“authorization_code”
问题描述
我们处于这样一个场景中,我们自己开发的单页应用程序(AngularJS 前端,后面带有 https 服务器 API)在新的浏览器选项卡中打开了我们的合作伙伴开发的另一个 Web 应用程序,而这第二个 Web 应用程序需要访问同样由我们开发的 https 服务器 API。
在寻找可能的解决方案之后,我们现在使用 IdentityServer4 创建了一个概念证明,其中第二个 Web 应用程序被配置为具有“authorization_code”授权类型的客户端。当所有应用程序都在同一个域上运行时,第三方应用程序能够访问我们的 https 服务器 API,而不会被提示输入用户 ID 和密码。
在这个概念证明中第二个 Web 应用程序的实现非常类似于bayardw 为帖子提供的解决方案
我现在的问题是:
当 - 在生产中 - 第二个 Web 应用程序不再与我们的应用程序和我们的 https 服务器 API 共享域时,在访问我们的 http 服务器 API 时,是否会提示来自第二个 Web 应用程序的调用输入用户名和密码?
解决方案
看来,你错过了一些重要的事情。
首先,任何 API 都不应该询问用户名和密码。相反,您的应用程序应该在每个请求中放置一个令牌,并且 API 应该验证该令牌。当用户访问您的(或第 3 方)Web 应用程序时,应该询问用户凭据。然后身份提供者创建一个身份令牌(通常保存在 cookie 中并在应用程序中使用)和访问令牌(提供给 API)。
每个令牌都是为在 IdP 中预先注册的特定客户端(应用程序)颁发的。
可能当托管在同一个域中时,您的两个应用程序共享身份 cookie 和客户端 ID,这是不正确的。
在生产场景中,您必须单独注册应用程序。其余的都应该可以正常工作(如果您遵循我在开头简要描述的例程)。
推荐阅读
- android - 如何使 Theme.Holo 适应 App 主题?
- sql - 返回取决于数字的行数
- hdfs - 如何使用 hdfs dfs cp 和 xargs 来解决 linux 参数列表限制?
- c# - 使用 NetOffice 创建 PDF/A 文件
- javascript - 如何在 VueJS 3 中使用 9.0.1 Firebase 方法
- c++ - 照片的C++ DLL注入
- java - 如何缩放PNG图像直到达到目标文件大小
- android - Android 中的 Splash Activity 未设置为全屏活动 - 三星 M51
- google-cloud-platform - 在 GCP 上部署 2-NIC 的独立 BIG-IP
- postgresql - 使用 libpq (postgresql) 进行高效的行读取