restful-authentication - Restful API : how to access the api securely?

标签 restful-authentication restful-architecture

我刚刚开始阅读有关实现 RESTful Web 服务和创建 RESTful api 的内容。我已经了解了 REST 的基本概念,但我一直在摸不着头脑,不知道如何安全地实现它?

例如,我的 web 应用程序有一个用户登录过程。成功登录后,我还应该传入什么 RESTful 请求来在服务器上进行身份验证??? 我能想到的是以下过程:

  • 用户登录(将用户名/密码发布到 API)
  • API 使用用户 key 进行响应
  • 用户 key 存储在本地
  • 当提出任何进一步的请求时,我会将此 key 包含在请求中进行身份验证

但这里似乎 userkey 是我发送到 API 的状态,但 REST 恰好是无状态的。此外,在发送 GET 请求的情况下,这也不太安全。

OAUTH 能解决我的困境吗?或者其他方式?有人可以指导我吗...

谢谢

最佳答案

UserKey,或者更好地称之为 token ,是一种客户端状态。您的 RESTful API 将保持无状态,因为它不会将此 token 存储在任何地方。

通常,此 token 是一些片段(用户名、密码、登录日期)的组合,散列为 MD5、SHA(或任何其他算法)。 每当客户端调用 RESTful API 的操作时,您的服务都会将传入的 token 与使用相同段动态生成的 token 进行比较。如果两个生成的 token 相等,则请求将通过身份验证。

GET 或 POST 方法没有问题:您需要从查询字符串或 HTTP header 中检索 token 。

确保连接安全的关键是通过 SSL 调用 RESTful API,因此您的通信将具有高度的安全性。

使用 GET 和使用查询字符串发送此 token 的一个重要问题是它可能太长,并且 URL 长度限制会阻止您除了 token 本身之外还有很多参数。

在我看来,你应该使用 POST 动词,因为你可以发送更多数据,它更灵活,并且可以避免在查询字符串中给出有问题的参数,这在日志记录方面可能很糟糕,因为你要记录用户名、密码、 token 和其他信息,这些都是敏感信息,如果黑客窃取您的日志(或者某些不受欢迎的人也检查您的日志),这些信息可能会危害您的用户。

关于restful-authentication - Restful API : how to access the api securely?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9061612/

相关文章:

web-services - 在 RESTful 服务中超越 CRUD

javascript - 云认证入门

c# - RESTful设计——通过传递列表请求多条记录

java - 安全和认证协议(protocol)

security - 他们的应用程序之间的谷歌身份验证和授权

java - 如何处理来自 REST 服务的大量数据

休息 : Correct HTTP verb to check a password

"disabled"用户的 HTTP 401 Unauthorized 或 403 Forbidden?

java - 休息概念 : Should the system authenticate every request of a session

ExtJs 模型代理与商店代理