使用哪种身份验证

which authentiation to use

我们的应用程序目前是用 .NET Framework + Razor 和传统的成员身份验证编写的。

我正在尝试对其进行现代化改造,所以我开始研究 .net core + React 解决方案,但它必须与现有应用程序协作。

所以目前,我们有旧的 monolit 和另一个 .net 核心 api,由 react 调用。 React 嵌入在 Razor 内部。

现在我需要选择要使用的身份验证。我想不能使用成员资格和其他基于会话的身份验证,因为多个域中有多个应用程序。所以我需要代币。

我不太确定我可以或应该使用哪种解决方案。我知道不记名令牌、.NET Identity、OAuth + OpenId 等流行语,但我可以在这种情况下使用它们中的任何一个来保护 API 以及 "traditional" razor 应用程序吗? 我应该在哪里存储令牌?我应该将它存储在 Razor 应用程序的会话中,并将它也传递给 React 吗?

我需要一个解决方案,将用户凭据存储在我们自己的数据库中,而不是列表 Google 或 Facebook 的单点登录。

有好的教程吗?

您的要求很高。我建议从一开始就复习这个话题。如果您只知道流行语,您将无法快速取得进展。我可以提供一些快速建议,但如果您不熟悉基础知识,这将无济于事。您的答案没有快速解决方案。

我建议在应用程序的边缘使用 authentication 以实现与现有应用程序的良好分离。我会创建一个轻量级方法,它接收来自客户端的请求,并以 API 可以验证的方式提供 api 用户身份的网关证明。我会使用 OAuth 和 OpenId Connect 协议来实现这种分离。另外,看看 IdentityServer,它是一个开源产品,可以很容易地在 Web 应用程序和 HTTP API 中实现单点登录和访问控制(身份验证)。

  • OpenId Connect 以验证用户
  • OAuth 限制这些轻量级方法调用的协作
  • JSON 用于用户身份的 Web 令牌 (JWT)

现在这个解决方案的问题是这个轻量级方法调用与系统的其余部分之间存在高度信任。 defense in depth的原则建议实施分层策略,这样如果这一层被破坏,另一层就在那里作为下一行防御。我会把剩下的留给你。