我正在为我的一个使用 IdentityServer4、ASP.NET Core 和 Angular 的 Web 应用程序开发安全解决方案,并且想知道我认为的方法是否正确。
该应用程序具有可以加载多个 SPA(微前端)的 Shell 接口(在 Angular 中作为单页应用程序开发的客户端)。此 App Shell 负责与 IdentityServer4 通信的身份验证。用户可以选择将作为子应用加载到 App Shell 中的微前端 (MFE) 之一。App Shell 和 MFE 都是 IdentityServer4 中的客户端。步骤顺序如下:
- 用户将获得一个登录页面以登录到 App Shell 界面。
- 一旦用户登录,IdentityServer4 就会提供一个 ID 令牌和一个访问令牌(仅适用于 App Shell)。在这个阶段,我们不知道用户会预先将哪个微前端加载到 App Shell 中。
- 然后 App Shell 将加载所有可供用户选择的 MFE。
- 这些 MFE 中的每一个都有其相关的微服务。
- 每个用户都将拥有与该 MFE 相关的特定权限集。例如:一。对于微前端“A”,用户“X”可以拥有“项目经理”角色相关权限 b.对于微前端“B”,同一个用户“X”可以拥有“Guest User”角色相关权限。
- 由于这些 MFE 中的任何一个都可以根据用户选择按需加载,并且根据“最小权限原则”,我们不想在登录时生成的访问令牌中添加所有 MFE 相关范围(来自第2步)。
- 当 MFE 加载到 App Shell 中时,使用来自令牌端点的“自定义授权”请求新的访问令牌。
- 与该 MFE 及其相关微服务的进一步交互将使用上述访问令牌(在步骤#7 中生成)进行控制。
- 如果用户卸载 MFE,则与其关联的访问令牌将被丢弃。
- 如果用户选择另一个 MFE,则从步骤#7 开始重复该过程。基本上,在任何时候,我们都会有两个访问令牌,一个用于 App Shell,另一个用于加载的 MFE。我们想知道我们在第 6 步中实施的方法是否符合安全最佳实践。
感谢有关上述方法的任何建议或解决我们问题的任何其他替代方案。