使用哪种身份验证

时间:2018-09-05 13:14:29

标签: security login single-sign-on token

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

我正在尝试使其现代化,因此我努力开发.net core + react解决方案,但它必须与现有应用程序协作。

因此,当前,我们拥有旧的monolit和其他.net核心api,它们由react调用。反应嵌入在剃刀内部。

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

我不确定我可以或应该使用哪种解决方案。我知道一些热门词汇,例如无记名令牌,.NET身份,OAuth + OpenId,但是在这种情况下我可以使用其中任何一种来保护API以及“传统”剃刀应用程序吗? 我应该在哪里存储令牌?我是否应该将其存储在razor应用的会话中,并将其也传递给React?

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

为此有一个很好的教程吗?

1 个答案:

答案 0 :(得分:0)

您在这里要求很多。我建议从一开始就复习这个话题。如果您只知道流行语,那么您将一无所获。我可以给您一些快速的建议,但是如果您不熟悉这些基础知识,那将无济于事。您的答案没有快速解决方案。

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

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

现在,此解决方案的问题在于,此轻量方法调用与系统其余部分之间存在高度信任。 纵深防御 的原则建议实施分层策略,这样,如果这一层受到威胁,则可以使用另一层作为下一道防线。我把剩下的交给你。