我正在与一些已经开发了一段时间的产品的人合作,不同平台上的应用程序调用web服务,他们将其用作存储数据的API。
他们开发的安全模型与我使用过的其他模型并不完全不同,但它在很多方面都是非常不标准的。首先,它们需要每个客户端都有一个API密钥,这是有意义的。然后有一些方法,你可以在没有身份验证的情况下点击,很好。但是,当您需要执行身份验证更新时,它们是这样做的:
首先,您使用用户名/密码调用一个端点,以在服务器端获得一个“会话”。此会话id在成功登录后返回给客户端。您所做的其他需要身份验证的操作都需要一个会话id参数,这是必需的,其思想是,如果您没有提供有效的会话id,则拒绝您的请求。
我花了一段时间使用OAuth进行身份验证,并为另一个项目上经过身份验证的请求要求令牌,所以对我来说这感觉很弱。一个明显的问题是,有人可能会通过暴力攻击来劫持别人的会话,但我预计他们会认为这是不太可能的。他们的会话Id是GUID,我认为GUID很大,在一定程度上很难破解,而且你还必须找到一个已经建立的有效会话。
我是否遗漏了一些显而易见的东西,或者这是否足够好?如果我不能证明这是真的有必要的话,我不想对此大惊小怪,并提议在平台范围内迁移到OAuth。
谢谢你的帮助。
发布于 2015-12-13 22:42:58
这听起来是可以接受的,只要确保GUID确实是用强大的随机引擎生成的,并且不能被暴力强制,并且它们在一段时间不活动后就会过期。
发布于 2015-12-14 05:24:00
首先,要求API密钥是一种身份验证形式。它对客户端而不是用户进行身份验证。
在所有客户端上都需要API密钥会增加丢失密钥的风险(尤其是当存储在不受信任的客户端上时,如移动设备)。
使用会话标识符并不是不安全的,但它确实需要为每个调用与颁发者交谈(并可能执行数据库查找)。
安全令牌可以携带语义信息(声明),并且可以在被调用的服务器上进行验证(验证签名),从而提高了可扩展性。
https://stackoverflow.com/questions/34252143
复制相似问题