【问题标题】:REST SECURE SECRET KEYREST SECURE 密钥
【发布时间】:2017-02-14 11:33:53
【问题描述】:

我正在编写一个 JAVA REST Web 服务,我试图了解它是如何工作的,但我已经设法制作了简单的方法,我的客户端将发送一个带有信息的 JSON,而服务器用它做一些事情。很简单。

所以我在做什么:我的客户想要创建一个新对象,例如一个帐户,但我不希望世界上的每个人都简单地向我的网站发送一个 json 并创建一个对象。 但是我不想过滤 IP,因为我不知道谁或什么将使用我的客户端应用程序。

那么我做了什么来阻止每个人简单地发送数据?我为玩家创建了一个密钥,他们像这样使用它: http://[website]/[Applicationname]/Webresources/[SECRETKEY]/create (发送一个带有请求的 json)

这行得通,因为现在只有拥有密钥的人才能创建,而且只有我将密钥提供给他们才能获得密钥。我很确定他们不会将这个秘密密钥提供给其他人,因为如果他们这样做,他们只会搞砸自己,他们的服务将获得大量虚假数据...... 但是我希望它更安全,所以无论如何都没有人可以获取密钥,我不知道HTTPS是否也会隐藏域+参数,我想不会吧?

所以我的问题是:我怎样才能在没有人知道密钥是什么的情况下发送密钥?

【问题讨论】:

  • 不要糟糕地重新发明轮子。查找如何进行 OAUTH2
  • 我没有重新发明任何东西:P 我这样做是因为我不知道任何其他方法,但是谢谢,我会研究 OAUTH2!

标签: java json rest security secret-key


【解决方案1】:

使用 HTTPS,发送您在正文中指定密钥数据的 POST 请求。您应该将内容类型指定为“x-www-form-urlencoded”。内容应该被编码,拦截 url 的对手将无法破译正文。

但是,您的实现对于使用 URL 路径中的密钥发送每个请求是非常不安全的,因为任何拦截 REST 调用的攻击者只需查看 url 就知道密钥。实现起来更加困难和耗时,但如果您可以执行 Basic Auth 或 OAuth 授权服务,它将仅授权具有颁发给他们的有效令牌的特定用户访问该服务,这是保护您的 REST 服务的一般方法。

【讨论】:

  • 确实,OAuth、Basic、Digest 等标准是最简单、最安全的方法。接下来 - 每个 WS/REST 框架(CXF、Spring、Axis、..)都有实现身份验证/授权选项的方法,尝试使用已经实现的选项
猜你喜欢
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 2016-05-23
  • 2013-07-30
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多