我想设计一个 Web 应用程序来保证安全身份验证并只向授权用户提供 API 访问权限。基本思想是简单地发送用户名和密码来对用户进行身份验证。并且用户可以使用 session_id 向服务器发出请求而无需再次验证自己。
当然,这是非常不安全的。但据我现在所知,为了不暴露用户的凭据,我们可以应用 TLS(https) 对其进行加密。
但是,随着我的研究,我熟悉了很多概念,例如 Base64、HMAC_SHA1、API key 、OAuth1.0。但我不明白为什么我们需要 TLS 以外的其他机制。任何人都可以帮助解释为什么 TSL 不足以确保身份验证和 API 访问的安全性吗?
最佳答案
如果您的 Web 应用程序对用户进行身份验证、发出 session ID 并在每次调用时验证该 ID,则安全 session 可以正常工作。您可以将 session ID 存储在一个安全的 cookie 中,该 cookie 会在每次请求时发回。
当您的 API 位于不同的域时,事情会变得更加复杂。现在您的 cookie 不会自动发送到服务 ( same-origin policy )。当您调用 API 时,您当然可以将 session ID 粘贴在授权 header 中。但是现在您的 API 需要与维护您的 session 状态的同一个后端存储进行对话以验证授权。此后端存储成为可扩展性和单点故障的瓶颈。
为了解决这个问题,现代协议(protocol)(如 OAuth2)发布了安全 token 。这些标记是 digitally signed (使用 HMAC)并且如果签名验证成功,则接收方信任 token 。验证 token 不需要后端调用,只需一个简单的加密操作。
API key 用于允许应用程序在不依赖用户进行身份验证的情况下获取安全 token 。将它们视为应用程序的密码。
使用安全 token 还允许您使用第 3 方授权服务器(如 Facebook 或 Google 等)并完全摆脱验证用户、存储密码、颁发 token 等业务。
关于api - 安全的 Web 身份验证和 API 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36115172/