2009-06-03 65 views
5

我创建了一个RESTful服务器应用程序,它可以在有用的URL(例如www.site.com/get/someinfo)上访问和服务请求。它建在春天。安全地向RESTFUL API提供凭证

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

干杯

编辑 - 我不认为我做的问题不够清晰。我已经强制HTTPS,我的问题更多,在代码中,当我从www.site.com/get/someinfo请求数据时,我如何通过我的凭证并提出请求?

+0

一些相关的以前的问题,可能会帮助你... ... [http://stackoverflow.com/questions/458482/rest-and-authentication-variants](http://stackoverflow.com/questions/458482/rest-和身份验证变种) [http://stackoverflow.com/questions/319530/restful-authentication](http://stackoverflow.com/questions/319530/restful-authentication) – 2009-06-03 13:20:05

+0

这似乎很有用。他们提到的HTTP AUTH的东西 - 这是明确完成的吗?我不需要使用令牌或类似的东西,我需要将这些数据专门用于RESTful应用程序,因为它稍后使用凭据。我可以通过AUTH直接发送这些信用卡吗? – mtrc 2009-06-03 13:28:01

回答

1

好吧,https与认证无关,它只是传输级加密。

如果您使用HTTP API进行交互,无论是否为https,并且弹出对话框,则表示使用HTTP身份验证(基本或摘要)。如果您的客户端实例化一个http客户端从这些“服务”中读取数据,那么当您实例化对象时,您可以传递这些凭据。

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

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

2

如果你可以添加HTTP标头你的要求,你可以只添加Authorization头:你在哪里使用基本身份验证

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

QWxhZGRpbjpvcGVuIHNlc2FtZQ==位为“username:password” base64编码(不带引号) 。 RFC 2617

0

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

5

你或多或少有3种选择:

  1. HTTP Auth
  2. 推出自己的基于协议的,理想HMAC挑战/响应
  3. OAuth

OAuth是目前很容易受到网络钓鱼攻击的影响,这种攻击很难被目标检测到。因此,我不会推荐它,直到协议被修改。

OAuth也应该是一个关于设计安全协议有多困难的教训,所以我不愿意推荐自己的路线。

这留下了HTTP认证,这可能是最好的,如果你可以使用它。所有这一切都说,互联网上几乎所有的东西都使用基于表单的身份验证,而且很多人甚至不用https来保证传输级别的安全,所以也许只是简单地发送密码文本就足够了。 。即使我仍然鼓励使用https,因为这至少可以减少中间人攻击的危险。