【问题标题】:which authentiation to use使用哪种身份验证
【发布时间】:2019-02-10 15:42:24
【问题描述】:

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

我正在尝试对其进行现代化改造,因此我坚持使用 .net core + react 解决方案,但它必须与现有应用程序配合。

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

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

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

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

有这方面的好教程吗?

【问题讨论】:

    标签: security login single-sign-on token


    【解决方案1】:

    你在这里要求很多。我建议从一开始就讨论这个话题。如果您只知道流行语,您将无法快速到达任何地方。我可以提供一些快速建议,但如果您不熟悉基础知识,这将无济于事。您的答案没有快速的解决方案。

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

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

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

    【讨论】:

    • 哦,我知道 OpenId 用于authenticatino 而OAuth 是auhhorization,我知道他们使用令牌,但它与.net Identity 有何不同?像这样简单的 JwtSecurityToken:jonhilton.net/2017/10/11/… 有效吗?作品。那么为什么是openid和oauth呢?为什么是.net 身份?为什么是 IdentityServer4?但最重要的是,我可以全部使用它们吗?
    • 这是一个很长的答案,我建议看看这些回答你所有问题的答案。您可以将它与您的应用程序一起使用。 stackoverflow.com/questions/42121854/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多