将凭据安全地提供给RESTFUL API

时间:2009-06-03 13:15:57

标签: java rest struts passwords

我已经创建了一个RESTful服务器应用程序,该应用程序可以访问有用的URL,例如www.site.com/get/someinfo。它是在Spring中构建的。

但是,这些访问受密码保护。我现在正在构建一个客户端应用程序,它将连接到此RESTful应用程序并通过URL请求数据。我如何通过凭证?目前,它只是向用户弹出用户/密码框,但我希望用户能够在客户端应用程序的框中键入用户名和密码,并让客户端应用程序在RESTful应用程序时提供凭据。它要求数据。客户端是使用Struts构建的。

干杯

编辑 - 我认为我的问题不够明确。我已经强制使用HTTPS了,我的问题更多,在代码中,当我从www.site.com/get/someinfo请求数据时,如何在提出请求的同时传递我的凭据?

4 个答案:

答案 0 :(得分:5)

您或多或少有3种选择:

  1. HTTP Auth
  2. 推出自己的协议,理想情况为HMAC挑战/回复
  3. OAuth
  4. OAuth目前容易受到网络钓鱼攻击的影响,这种攻击在很大程度上是目标无法检测到的。因此,在协议修改之前我不会推荐它。

    OAuth也应该是关于设计安全协议有多困难的一个教训,因此我对推荐自己的路线犹豫不决。

    留下HTTP身份验证,如果你可以使用它,这可能是最好的。

    所有这一切,互联网上的几乎所有内容都使用基于表单的身份验证,而且许多人甚至不愿意使用https来保证传输级别的安全性,因此,简单地发送密码文本可能只是“足够好”以满足您的需要。即使我仍然鼓励使用https,因为这至少可以降低中间人攻击中的危险。

答案 1 :(得分:2)

如果您可以在请求中添加HTTP标头,则只需添加Authorization标头:

即可
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

您正在使用基本身份验证,而QWxhZGRpbjpvcGVuIHNlc2FtZQ==位是“username:password”base64编码(不带引号)。 RFC 2617

答案 2 :(得分:1)

嗯,https与身份验证无关,它只是传输级加密。

如果您与HTTP api进行交互,无论是否为https,并弹出对话框,这意味着它使用HTTP身份验证,基本或摘要。如果客户端实例化http客户端以从这些“服务”中读取数据,则可以在实例化对象时传递这些凭据。

如果您使用客户端脚本,XmlHttpRequest也支持http身份验证。

因此,就代码而言,如何将凭据传递给RESTful服务取决于您正在使用的http客户端(您实例化以检索数据的对象)。您可以自己从客户端收集这样的用户名/密码,并使用它来呼叫其他服务。

答案 3 :(得分:0)

查看现有解决方案。在这种情况下,oauth