token - 是否可以在多个服务器上重复使用访问令牌 - IdentityServer4
问题描述
目前,我们正在构建一个基于 Web 的应用程序,我们有 Web 服务器,我们有应用程序服务器托管我们的资源。我们还将使用 Mule ESB 来使用任何 Web 服务或 API。我们将拥有 Alfresco DMS 解决方案,我们将使用带有 Mule ESB 的 alfresco 服务。
我们正在研究如何为这种情况实施 SSO 方法。我们已经有 IdentityServer4 用于身份联合。它为客户端颁发访问令牌,每当用户在 Mule ESB 端时,我们都需要对用户进行身份验证,而无需再次询问用户凭据。根据我的研究,可以在 Mule ESB 上添加外部身份提供。我们不知道的是,当用户登录应用程序服务器时发出的访问令牌可以传递给 Mule ESB,而 Mule ESB 可以在之前验证访问令牌
实际上,我们正在寻找答案的问题是,是否有可能只向客户端发出一次访问令牌,然后在每一侧(Mule ESB、Alfresco)验证此令牌,而不要求用户一次又一次地输入凭据。
解决方案
不建议对多个应用程序使用访问令牌。这是通过这个和这个资源突出显示的。基本上必须限制访问令牌的范围。这是为了防止访问令牌被滥用。
在您的场景中,您有多个应用程序。如果您的目标是使用一个在所有人之间共享的访问令牌,我建议不要这样做。相反,如果您请求具有此类范围的访问令牌,则可以对多个 API 使用单个访问令牌。例如,如果范围允许,ESB 中的 API 可以设计为接受访问令牌(范围可以通过令牌自省从 API 端点验证)。但允许每个客户端应用程序获取自己的令牌。这使您的架构更加安全。
SSO 的一种解决方案是允许基于浏览器的 SSO。身份提供者在浏览器中维护一个会话。因此,如果您的一个客户通过登录,您的下一个客户将使用之前的会话跳过登录页面。这本质上是一种 SSO 行为。例如,这就是允许您通过单次登录使用 Gmail、Youtube 和 Google Drive 的原因。浏览器与 Google 保持会话。每个应用程序获取令牌,但跳过登录页面。
推荐阅读
- angular - 如何以角度隐藏组件但仍从父组件传递函数?
- typescript - 在“.d.ts”文件中使用“导出声明函数”和“导出函数”有什么区别
- android - 如何听改变高度底部表格布局android
- powershell - 设置用户:使用 Connect-ExchangeOnline 找不到与参数名称“标题”匹配的参数
- java - spring requestmapping测试代码不起作用
- junit - 如何使用 Mockito 以通过 javax 验证的方式模拟一个类
- typescript - 以角度 8 动态触发点击事件
- python - 如何在一个 pandas 数据帧的行中的 ID 组并使用它们从另一个数据帧中提取记录
- python - Tkinter 回调中的异常,_tkinter.TclError:预期的整数但得到“”
- oracle - Oracle 旧的 Lelft 连接语法 (+) 在连接条件中与 Like 运算符一起使用