reactjs - 使用 OAuth2 和 single-spa 登录/身份验证
问题描述
我已经开始为具有单水疗中心的前端层构建原型。布局与https://github.com/react-microfrontends非常相似,这意味着:
- 根配置
- 导航栏 (React)
- 两个应用程序(两个 React)
- 样式指南模块
- 一个 API 模块,用于处理与一组 API 的通信
我设法让一个基本原型运行,但我现在需要实现一些基于 OAuth2/OpenID 的身份验证,我不知道从哪里开始。如果未通过身份验证或没有有效的 JWT,我需要将用户重定向到单独的 URL(Auth0 样式),然后每当身份验证令牌过期时,我需要一种令牌刷新机制。除了关于最佳实践、现有示例等的任何一般性建议之外,我还有一些我无法完全解决的具体问题。
- 未经身份验证时,如何将用户重定向到不同的 URL?哪个模块/组件应该负责它?
- 是否有开箱即用的实现 OAuth2 的库?特别是,我对某种自动令牌刷新感兴趣。
- 确保未经身份验证/未经授权的用户无法访问应用程序包的最佳方法是什么?
提前致谢。
解决方案
典型的方法是设置一个 Auth 微前端,它将:
登录时处理凭证检索。无论是通过密码流还是 OAuth(在您的情况下)。由于您使用的是 React,因此您的 OAuth 提供者应该有一个库,您可以在 Auth MFE 中使用它来与之交互。如果是 keycloak,React Keycloak 就很合适。这里没有经验法则。
通过浏览器存储或共享状态将凭据传递给您的两个 React 应用程序(微前端)和 API 模块。这样做,API 模块将在 API 调用中设置凭据。并且两个 react 应用程序会在继续执行其内部逻辑之前检查凭据是否存在。
在到期时刷新凭据或注销用户(取决于您的逻辑)。例如,记录用户意味着从浏览器存储中删除凭据。
登录后重定向到您的反应应用程序之一。这意味着 Auth MFE 路由应始终在根配置中处于活动状态。
我希望它有所帮助。在这里,我总结了流程。
更多内容在我的 github 帐户https://github.com/exaucae/single-spa-patterns/blob/master/AUTHENTICATION.md
推荐阅读
- solr - Solr:如何在通过 CSV 导入时以小写形式存储特定字段的数据?
- javascript - 如何使用 Javascript 向 baseurl 添加其他路径
- autodesk-forge - Autodesk forge 标记核心
- google-sheets - 使用 sum 和 countifs 按月和团队在多个列中获得“是”的百分比 - 有没有更简单的方法?
- django - 使用 self.add_error() 和引发 ValidationError() 有什么区别?
- excel - 尝试使用 C# Windows 应用程序将公式添加到 Excel 输出中的列。但是得到#NAME?错误
- python - Multicell LSTM RNN 返回 nan 训练错误
- python - 通过使用二维数组索引来填充 numpy 数组
- r - 在使用 AFINN 词典的 inner_join() 之后,单词列表如何仍然具有比词典更多的元素?
- android-studio - Android Studio 不显示颤振设备