REST API安全审核

时间:2015-12-13 14:27:17

标签: rest authentication oauth

我与一些已开发产品的人合作了一段时间,各种平台上的应用调用了他们用作存储数据的API的网络服务。

他们开发的安全模型与我曾经合作过的其他模式并不完全不同,但它在很多方面都非常不标准。首先,它们需要每个客户端的API密钥,这是有道理的。然后有一些方法可以在没有身份验证的情况下点击,很棒。但是,当您需要进行经过身份验证的更新时,他们就是这样做的:

首先,您使用用户名/密码调用端点以获得"会话"去服务器端。成功登录后,会话ID将返回给客户端。您执行的其他所有需要身份验证的操作都会获取会话ID参数,这个参数是必需的,并且您的想法是,如果您没有提供有效的会话ID,请拒绝您的请求。

我花了一些时间使用OAuth进行身份验证,并在另一个项目中要求令牌用于经过身份验证的请求,所以这对我来说感觉很弱。一个显而易见的问题是,某人可能通过蛮力攻击劫持某人的会话,但我希望他们会认为这不太可能。他们的会话ID是GUID,我认为这是很大的,很难在某种程度上破解,而且你必须打一个已经建立的有效会话。

我错过了一些明显的东西,或者这可能还不错?如果我不能证明这是非常必要的话,我不想对此提出异议并建议在平台范围内迁移到OAuth。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这听起来是可以接受的,只要确保GUID确实是由一个强大的随机引擎生成的,这个引擎不能强制执行,并且它们会在一段时间没有活动后过期。

答案 1 :(得分:0)

首先,要求API密钥是一种身份验证形式。它验证客户端而不是用户。

在所有客户端上要求API密钥会增加丢失密钥的风险(尤其是存储在移动设备等不受信任的客户端上时)。

使用会话标识符并不是不安全的,但它确实需要与每个调用的发布者进行通信(并且可能正在进行数据库查找)。

安全令牌可以携带语义信息(声明),并且可以在被叫服务器上验证(验证签名),从而提高可扩展性。