RESTful Web服务-如何验证来自其他服务的请求?
|
我正在设计一个RESTful Web服务,该服务需要用户以及其他Web服务和应用程序访问。所有传入的请求都需要进行身份验证。所有通信均通过HTTPS进行。用户身份验证将基于身份验证令牌进行工作,该身份验证令牌是通过将用户名和密码(通过SSL连接)发布到服务提供的/ session资源中而获得的。
对于Web服务客户端,客户端服务后面没有最终用户。这些请求是由计划任务,事件或某些其他计算机操作启动的。连接服务的列表是事先已知的(显然,我想)。我应该如何验证来自其他(网络)服务的这些请求?我希望对这些服务的身份验证过程尽可能地容易实现,但是不以安全为代价。对于这种情况,标准和最佳做法是什么?
我能想到的(或已向我建议的)选项:
让客户服务诉诸拥有“假”用户名和密码,并以与用户相同的方式对它们进行身份验证。我不喜欢此选项-感觉不正确。
为客户端服务分配一个永久的应用程序ID,也可以分配一个应用程序密钥。据我了解,这与拥有用户名+密码相同。使用此ID和密钥,我可以对每个请求进行身份验证,或者创建身份验证令牌以对其他请求进行身份验证。无论哪种方式,我都不喜欢这个选项,因为任何拥有应用程序ID和密钥的人都可以冒充客户端。
我可以在以前的选项中添加IP地址检查。这将使执行虚假请求变得更加困难。
客户证书。设置我自己的证书颁发机构,创建根证书,并为客户端服务创建客户端证书。不过,我想到了两个问题:a)我如何仍允许用户在没有证书的情况下进行身份验证,以及b)从客户端服务的角度来看,实现此方案有多复杂?
还有什么-那里必须有其他解决方案吗?
我的服务将在Java上运行,但是我故意遗漏了将在其上构建哪种特定框架的信息,因为我对基本原理更感兴趣,而对实现细节却不太感兴趣-我认为这是最好的解决方案无论底层框架如何,都可以实现。但是,我对这个主题没有一点经验,因此,有关实际实现的具体技巧和示例(例如有用的第三方库,文章等)也将不胜感激。
没有找到相关结果
已邀请:
9 个回复
茬贺努充尽
我不是Java专家,并且我从未使用过它来做客户端证书。但是,快速的Google会带我们进入本教程,它看起来正好位于您的小巷。 尽管进行了所有“什么是最好的”讨论,但我还是要指出,还有另一种哲学说:“代码越少,聪明就越好。”(我个人持有这种哲学)。客户端证书解决方案听起来像很多代码。 我知道您表达了有关OAuth的问题,但是OAuth2提案确实包含了针对您的问题的一种解决方案,即“承载者令牌”,该解决方案必须与SSL结合使用。我认为,为简单起见,我会选择硬编码的用户名/密码(每个应用一个),或者选择非常相似的承载令牌。
亥套惟间连
例如: 2011年6月3日
然后连接用户密码,例如\“ my4wesomeP4ssword!\”
然后执行该字符串的MD5:
何时调用请求,请始终使用此令牌,
这个令牌每天都是唯一的,因此我想这种保护足以永远保护我们的服务。 希望有所帮助 :)
马口
貉骂
呈辖玫割善
财沟项胶
樊熄忙暖
的响应(根据您的客户端格式); 将此
与实际会话一起存储在actual10 actual中。
或使用
为您创建和销毁密钥;
在每个REST调用中获取sessionid,例如
(或其他方式); 使用
从地图中检索
; 如果会话处于活动状态,则验证对该会话的请求; 发回响应或错误消息。
姬第柔炒
喷乡顾沥沪