将凭据安全地提供给RESTFUL API

mtr*_*trc 6 java passwords rest struts

我创建了一个RESTful服务器应用程序,它可以在有用的URL(例如www.site.com/get/someinfo)上提供服务请求.它是在Spring中构建的.

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

干杯

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

Jas*_*ins 5

你或多或少有3个选择:

  1. HTTP身份验证
  2. 滚动您自己的协议,理想的HMAC挑战/响应为基础
  3. OAuth的

OAuth目前容易受到网络钓鱼攻击的影响,这种攻击在很大程度上是目标无法检测到的.因此,在协议修改之前我不会推荐它.

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

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

总而言之,互联网上的几乎所有内容都使用基于表单的身份验证,而且许多人甚至不愿意使用https来保证传输级别的安全性,因此可能只是简单地发送明文中的密码文本就足够了.即使我仍然鼓励使用https,因为这至少可以减少中间人攻击中的危险.


Ser*_*Seb 1

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

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

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

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