【问题标题】:User authentication methods for REST api projectREST api 项目的用户认证方法
【发布时间】:2016-01-09 06:31:47
【问题描述】:

我的网络服务器有一个 REST API。我需要给我的应用添加用户认证,我的思路是这样的:

  1. 从应用表单中获取用户的用户名和密码
  2. 加密密码,Base64 对用户名和密码进行编码
  3. 通过 HTTPS 将数据发送到 REST API
  4. Web 服务器验证凭据,返回错误或成功

这安全吗?我看到很多提到 OAuth2。它是什么?它比我的流程做得更好?

【问题讨论】:

    标签: android api rest oauth oauth-2.0


    【解决方案1】:

    对 OAuth2 的一个非常基本的解释是,用户将登录到您的系统,并在发送用户名和密码之前对其进行加密,然后如果通过身份验证,它将向用户发送回一个令牌。

    此后,每当用户尝试联系 Web 服务器时,它都会将此令牌与每个 API 调用一起发送。这就是它确保未经身份验证的人无法访问您的网络服务器的方式。

    所以基本上你当前的方法包括 OAuth2 标准的一部分,但不是最重要的部分(令牌)。

    在您的情况下,您将如何阻止未经身份验证的人访问您的网络服务器?如果项目很小,那么风险就不会那么大。但对于大公司来说,这是一个真正需要应对的威胁。

    【讨论】:

      【解决方案2】:

      您对用户密码使用“加密”一词而不是“哈希”这一事实表明您对此知之甚少。这几乎肯定会导致您在某个地方弄乱您的身份验证程序,并使您的用户私人信息面临风险。

      关于 OAuth2 的一个非常重要的一点是,它可以与许多现有的第三方提供商(Google、Facebook、Twitter 等)一起使用,而您只需付出最小的努力。

      您无需执行任何操作来存储凭据甚至验证用户身份。第三方负责所有这些,并简单地为客户端提供一个令牌(长随机字符串),然后将其传递给您的服务器。然后,您的服务器与第三方服务器通信以确保令牌有效(并获取您需要的任何信息,例如用户名、电子邮件地址或其他信息)。

      如果可以的话,你真的应该考虑使用它。大公司为保护他们的身份验证方法付出了很多努力,而您可以通过使用它来获得所有这些。

      最后一点是,用户不需要为(还)另一个帐户创建和记住凭据。

      Google 为get you started 提供了一些文档,并包含一个OAuth playground 以测试其在实践中的工作方式。

      【讨论】:

      • 我很困惑。您链接的文档不是用于访问 Google 的 API 的吗?
      • @user5434408 所有 OAuth2 提供程序都有某种 API,因此您可以检索有关用户的信息,以及访问其他服务(如果您愿意) - 您可以调用的可用 API 基于值当您希望用户进行身份验证时,您指定的称为 scopes。更适合您阅读的链接可能是Open ID Connect 页面,它更多地关注身份验证,而不是授权。
      • 所以澄清一下,Google 的 OAuth2 允许拥有 Google 帐户的用户通过他们的 Google 帐户访问我的应用程序(而不是在我的应用程序上创建自定义帐户)?
      • @user5434408 是的,这正是 OAuth2 提供者的工作方式。您选择要支持的 OAuth2 提供者(或多个提供者),并且用户通过该提供者向其现有帐户进行身份验证。
      【解决方案3】:

      在为您的用户提供身份验证门户之前,您应该真正尝试了解加密和散列之间的区别。您可以使用许多不同的哈希算法。我过去曾亲自使用过 BCrypt,我也有一个相关的 SO Question 与它有关。如今,您可以在几乎所有主要的高级语言中找到几乎所有流行算法的实现。

      显然,如果您不想做所有事情,您可以使用 OAuth 提供程序,该提供程序会为您处理所有难题,例如安全地存储密码、保护数据库以及所有其他安全方面。有很多可靠的 OAuth 提供商,Google、Facebook、Yahoo 等。

      要记住的一点是托管应用的环境。每次用户想要访问您的应用程序时,OAuth 确实依赖于 OAuth 提供者的服务器可用的连接。因此,如果您位于可能阻止访问 Facebook 等网站的公司防火墙或类似设备的后面,这可能是个大问题。

      我个人更喜欢对我的 API 项目进行基于令牌的身份验证。如果您不熟悉基于令牌的身份验证,可以阅读此 SO Questionthis 链接。

      a 背后的一般概念 基于令牌的身份验证系统是 简单的。允许用户输入他们的 用户名和密码,以便 获得一个令牌,使他们能够 获取特定资源 - 没有 使用他们的用户名和密码。 获得他们的令牌后, 用户可以提供令牌 - 其中 提供对特定资源的访问 一段时间 - 到远程 网站。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-14
        • 2015-07-07
        • 1970-01-01
        • 1970-01-01
        • 2019-05-19
        • 2018-07-28
        • 2017-08-03
        • 2014-05-31
        相关资源
        最近更新 更多