【问题标题】:Secure Web Authentication and API access安全的 Web 身份验证和 API 访问
【发布时间】:2016-03-20 14:48:05
【问题描述】:

我想设计一个 Web 应用程序,它可以保证安全的身份验证,并且只向授权用户提供 API 访问权限。基本思想是简单地发送用户名和密码来获得用户身份验证。并且用户可以使用 session_id 向服务器发出请求,而无需再次验证自己。

当然,这是非常不安全的。但据我现在所知,为了不暴露用户的凭据,我们可以应用 TLS(https) 对其进行加密。

但是,随着我的研究,我熟悉了很多概念,例如 Base64、HMAC_SHA1、API 密钥、OAuth1.0。但我不明白为什么我们需要 TLS 以外的那些机制。谁能帮助解释为什么 TSL 不足以确保身份验证和 API 访问安全?

【问题讨论】:

    标签: api authentication ssl https hmacsha1


    【解决方案1】:

    如果您的 Web 应用程序对用户进行身份验证、发出会话 ID 并在每次调用时验证 ID,则安全会话可以正常工作。您可以将会话 ID 存储在一个安全的 cookie 中,该 cookie 会在每次请求时被发回。

    当您的 API 位于不同的域时,事情会变得更加复杂。现在您的 cookie 不会自动发送到服务 (same-origin policy)。您当然可以在调用 API 时将会话 ID 粘贴在 Authorization 标头中。但是现在您的 API 需要与维护会话状态的同一个后端存储通信以验证授权。此后端存储成为可扩展性和单点故障的瓶颈。

    为了解决这个问题,现代协议(如 OAuth2)会发布安全令牌。这些令牌是digitally signed(使用 HMAC),如果签名验证成功,接收方信任令牌。验证令牌不需要后端调用,只需一个简单的加密操作。

    API 密钥用于允许应用程序获取安全令牌,而无需依赖用户进行身份验证。将它们视为应用程序的密码。

    使用安全令牌还允许您使用第 3 方授权服务器(如 Facebook 或 Google 等)并完全摆脱身份验证用户、存储密码、颁发令牌等业务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-21
      • 2014-10-13
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 2017-11-28
      相关资源
      最近更新 更多