【发布时间】:2021-05-21 22:35:41
【问题描述】:
我想在 React 中编写一个与 .net 核心 API 通信的 SPA 应用程序。 我认为在不同的域上拥有两个独立的项目(API + UI)会更容易。
API 应该受到保护,只有经过身份验证的用户才能发出请求。 在反应中,我希望拥有允许我注册和登录用户的登录和注册表单,并且我希望拥有社交提供者。我想创建整个 UI 来管理 React SPA 中的用户,并使用 API 保存这些数据。
我做了很多研究,我有点困惑。 我真的很想使用 Core Identity,因为它看起来就像是为它量身定做的
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-5.0
-
它有一个现成的用户、声明、角色等模型。
-
它内置了用于管理密码、用户、角色等的服务
-
它具有自定义身份验证方案、策略、角色等的功能,
我认为这是一个很好的解决方案的原因有很多。
不幸的是,在文档站点上有一条信息表明,SPA 集成可以与 Identity Server 结合使用。
去年我浏览了本教程https://www.youtube.com/watch?v=Fhfvbl_KbWo&ab_channel=RawCodingRawCoding 的每一集(顺便说一句。很棒的教程),我很确定,我不想在这种情况下使用 Identity Server 4。据我所知 - 当您希望为多个应用程序提供 SSO 时,这是最好的解决方案,并且您希望提供一种通用方法来对所有应用程序进行用户身份验证。它有自己的用户界面,用于管理用户注册、登录和管理。这不是我需要的——我只想用 React 编写,因为我希望所有应用程序都具有相同的 mui 主题而不重定向到 Identity Server。
但也许我错了,Identity Server 会为我工作。但我发现提供自己的 UI 而不是 MVC 需要做很多工作 (https://medium.com/@piotrkarpaa/using-spa-react-angular-ui-with-identity-server-4-dc1f57e90b2c)
现在我认为,我应该在后端使用 Identity Core,并从 React SPA 使用自定义控制器与它进行通信,如下所示: https://www.c-sharpcorner.com/article/authentication-and-authorization-in-asp-net-core-web-api-with-json-web-tokens/
使用带有 JWT 令牌的 API 验证 React SPA - 我认为这将根据以下示例起作用: https://www.youtube.com/watch?v=FSUa8Vd-td0&ab_channel=Geek%27sLesson - 但这里没有 Identity Core。
但我不确定这是不是最好的方法,我不知道我是否可以通过这种方式添加社交提供者。
此外,我还发现了一些教程如何将 React App 与 .net 核心后端(和身份验证)结合起来,如下所示: https://www.red-gate.com/simple-talk/development/dotnet-development/integrate-create-react-app-with-net-core-5/
但我想要两个独立的应用程序,API 和 UI。
实现这一目标的最佳方法是什么?
编辑:
几个月后,我已经有了 SPA 应用程序、API 和 IS4。使 Identity Server 视图(注册、登录等)看起来类似于 SPA 应用程序存在很多问题。 (MUI 中的 React 应用,带有引导程序的 MVC...)。
现在我认为这是一个错误的决定,导致了很多问题:
API 和 Identity Server 4 用户的 2 路集成 SPA 布局、样式、颜色的变化——这一切都需要在 Identity Server 4 上进行维护 糟糕的用户体验 - 在另一个应用程序上编辑用户配置文件,在另一个样式略有不同的域上 现在我要重写应用程序,而不是使用 Identity Server 4。注册、登录和编辑用户配置文件的组件将在 SPA 应用程序中,维护用户将使用 API 完成。
我唯一不知道的是如何通过这种方法使用社交提供者?
我的问题仍然没有答案,有人可以帮助我提供适当的解决方案吗?
【问题讨论】:
-
有很多方法可以做到这一点,并且在网络上有几个指南。你做过研究吗?使用 JWT 进行身份验证是一种非常常见的方法。顺便说一句,Identity 不会强迫你使用 Razor 页面。
-
感谢您的回答,我编辑了我的问题并添加了有关我已经研究过的更多信息。
-
因此,如果您想自己管理用户(而不是通过 Google、Facebook 等使用登录),那么 Identity 应该适合您。无论您如何管理用户,生成 JWT 应该是相同的。
-
问题是,我真的很想有可能登录并注册社交服务提供商.. 无需密码。 .net 核心身份和反应有可能吗?
-
我不确定它是否被视为身份的一部分,但是是的,您绝对可以将登录与身份一起使用社交提供者 - see the docs。 React 是完全独立的——它只是一个前端层,实际上与所有其他东西没有太大关系。所以是的,你当然也可以使用 React :)
标签: c# reactjs authentication