rest - REST认证方案的安全性

标签 rest authentication oauth amazon-s3 rest-security

背景:

我正在设计 REST Web 服务的身份验证方案。这并不“真正”需要安全(这更像是一个个人项目),但我想让它尽可能安全,就像练习/学习体验一样。我不想使用 SSL,因为我不想带来麻烦,而且主要是设置它的费用。

这些问题对于我开始特别有用:

我正在考虑使用 Amazon S3's authentication 的简化版本(我喜欢OAuth,但它对于我的需求来说似乎太复杂了)。我正在添加随机生成的 nonce ,由服务器提供给请求,以防止重放攻击。

回答这个问题:

S3 和 OAuth 都依赖于对请求 URL 以及一些选定的 header 进行签名。 他们都不签署 POST 或 PUT 请求的请求正文。这是否容易受到中间人攻击,这种攻击会保留 url 和 header ,并用攻击者想要的任何数据替换请求正文?

看来我可以通过在签名的字符串中包含请求正文的哈希来防止这种情况。这安全吗?

最佳答案

之前的答案仅在数据传输上下文中提到了 SSL,实际上并未涵盖身份验证。

您确实在询问如何安全地验证 REST API 客户端。除非您使用 TLS 客户端身份验证,否则单独使用 SSL 并不是 REST API 的可行身份验证机制。没有客户端身份验证的 SSL 仅对服务器进行身份验证,这与大多数 REST API 无关,因为您确实想要对客户端进行身份验证。

如果您不使用 TLS 客户端身份验证,则需要使用基于摘要的身份验证方案(例如 Amazon Web Service 的自定义方案)或 OAuth 1.0a 甚至 HTTP 基本身份验证(但仅通过 SSL) .

这些方案验证请求是由预期的某人发送的。 TLS (SSL)(无需客户端身份验证)可确保通过线路发送的数据不被篡改。它们是独立但互补的关注点。

对于那些感兴趣的人,我扩展了一个关于 HTTP Authentication Schemes and how they work 的问题。 .

关于rest - REST认证方案的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/454355/

相关文章:

rest - 设置 Jersey 以允许缓存?

authentication - 带证书的 Kubernetes 身份验证

session - 在 ServiceStack 中更新不同用户的 session

security - 设计 (OAuth2) 访问 token

asp.net-web-api - 前缀 OAuth 属性 ?即作为 :client_id

java - 使用 Java 删除我的 Facebook 帐户上的帖子

c# - 来自 Vue 应用程序的 Post 请求被 CORS 策略阻止

c# - 方法不允许(http 错误 405)、wcf、rest 服务、post 方法

security - 登录用户的SSL?

ruby-on-rails - 参数丢失或值为空 : user