api - 安全的 Web 身份验证和 API 访问

标签 api authentication ssl https hmacsha1

我想设计一个 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/

相关文章:

javascript - Youtube 数据 API 视频嵌入限制

jquery - Tumblr API 获取最后 50 张大尺寸照片帖子不太有效

authentication - 如何在 xPages 中创建自定义控件登录表单?

c# - Azure 上对站点的 SSL HttpWebRequest 证书不匹配?

apache - 使用现有证书的 Apache 中的 SSL 错误

Java/Selenium (ieDriver) - 如何避免在每次测试运行中重复 webapp 登录 Before Method (jUnit)

javascript - Node.js 应用程序收到从 GET 请求到 API 的空响应

node.js - 为并行请求生成 oAuth nonce

authentication - 在 Meteor 中使用密码的 Accounts.registerLoginHandler

java - 使用双向身份验证连接到服务器时 Java 测试客户端中的 SSL Handshake_failure