web-services - RESTful Web 服务 - 如何验证来自其他服务的请求?

标签 web-services authentication rest restful-authentication client-certificates

我正在设计一个 RESTful Web 服务,该服务需要用户访问,但也需要其他 Web 服务和应用程序访问。所有传入请求都需要进行身份验证。所有通信均通过 HTTPS 进行。用户身份验证将基于身份验证 token 进行工作,身份验证 token 是通过将用户名和密码(通过 SSL 连接)发布到服务提供的 /session 资源而获取的。

对于 Web 服务客户端,客户端服务背后没有最终用户请求由计划任务、事件或某些其他计算机操作发起。连接服务的列表是事先已知的(显然,我猜)。 我应该如何对来自其他(网络)服务的这些请求进行身份验证?我希望这些服务的身份验证过程尽可能容易实现,但又不以牺牲安全性为代价。对于这样的场景,标准和最佳实践是什么?

我能想到的(或已向我建议的)选项:

  1. 让客户端服务使用“假”用户名和密码,并以与用户相同的方式对其进行身份验证。我不喜欢这个选项 - 它只是感觉不对。

  2. 为客户端服务分配一个永久应用程序 ID,也可能是一个应用程序 key 。据我了解,这与拥有用户名+密码相同。有了这个 id 和 key ,我可以验证每个请求,或者创建一个身份验证 token 来验证进一步的请求。不管怎样,我不喜欢这个选项,因为任何能够掌握应用程序 ID 和 key 的人都可以冒充客户端。

  3. 我可以在之前的选项中添加 IP 地址检查。这将使执行虚假请求变得更加困难。

  4. 客户端证书。设置我自己的证书颁发机构、创建根证书并为客户端服务创建客户端证书。不过,我想到了几个问题:a) 如何仍然允许用户在没有证书的情况下进行身份验证;b) 从客户端服务的角度来看,此场景的实现有多复杂?

  5. 还有其他问题 - 一定还有其他解决方案吗?

我的服务将在 Java 上运行,但我故意省略了有关它将构建在什么特定框架上的信息,因为我对基本原理更感兴趣,而不是对实现细节感兴趣 - 我认为最好的解决方案因为无论底层框架如何,都可以实现这一点。然而,我对这个主题有点缺乏经验,所以关于实际实现的具体技巧和示例(例如有用的第三方库、文章等)也将非常感激。

最佳答案

读完你的问题后,我想说,生成特殊 token 来完成所需的请求。该 token 将在特定时间(假设一天)内存在。

以下是生成身份验证 token 的示例:

(day * 10) + (month * 100) + (year (last 2 digits) * 1000)

例如: 2011 年 6 月 3 日

(3 * 10) + (6 * 100) + (11 * 1000) = 
30 + 600 + 11000 = 11630

然后与用户密码连接,例如“my4wesomeP4ssword!”

11630my4wesomeP4ssword!

然后对该字符串进行MD5:

05a9d022d621b64096160683f3afe804

当你调用请求时,总是使用这个 token ,

https://mywebservice.com/?token=05a9d022d621b64096160683f3afe804&op=getdata

这个 token 每天都是唯一的,所以我想这种保护足以始终保护您的服务。

希望有帮助

:)

关于web-services - RESTful Web 服务 - 如何验证来自其他服务的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6134082/

相关文章:

java - 带有 axis2 的双向 ssl 导致读取超时

java - 当用户尝试通过 HTTP 连接时发回 HTTP 响应而不是堆栈跟踪

javascript - 使用 JWT 身份验证进行 WordPress Rest API 并获取 [jwt_auth] ip_blocked”

authentication - 登录尝试失败后将用户名保留在表单输入字段中(Java/Spring-security)

python - flask 和 python 是否存在类似 CanCan(授权库)的东西

javascript - 带函数参数的 Rest 运算符

java - android 新手-应该使用什么技术来访问网络服务?

java - 在 Netbeans 中生成 WSDL 时出错

android - 在android中调用rest webservice时超时异常

javascript - 刷新backbone.js时强制导航到应用程序根目录