繁体   English   中英

如何安全处理Rest API用户身份验证?

[英]How to handle Rest API user authentication securely?

在过去的几个月中,我一直在为我工作的公司开发Web应用程序的Rest API。 端点提供数据,例如交易历史记录,用户数据和支持凭单数据。 但是,我一直遇到一个似乎总是使我退缩的问题。

我似乎一直遇到的问题是如何安全处理Rest API的用户身份验证? 所有数据都将通过SSL连接发送,但是我当中有一部分人对可能出现的潜在安全问题抱有幻想。 目前,当客户端尝试登录时,客户端必须提供用户名或电子邮件地址,以及登录端点的密码(例如,“ / api / login”)。 连同此信息一起,必须通过发送登录凭据的请求的标头提供浏览器指纹。 然后,API验证指定的用户是否存在,检查提供的密码是否正确,并将指纹存储在数据库模型中。 要访问API中的任何其他终结点,必须先登录才能获得有效的令牌以及有效的浏览器指纹。

我一直在使用浏览器指纹来防止令牌劫持,并确保使用用于登录的同一设备来发出请求。 但是,我注意到这种情况适得其反。 我用来生成浏览器指纹的客户端库并不总是准确的。 有时,库会完全吐出另一个指纹。 由于不同的指纹未被API识别为有效指纹,因此这导致某些客户端请求失败。 我想跟踪使用什么设备向API发出请求。 在保护令牌免遭劫持的同时,是否有更一致的方法?

当想到上一个问题时,还会想到另一个问题。 如何将身份验证令牌安全地存储在客户端上,或者以某种方式使某人难以通过诸如xss-attack之类的恶意手段来获取令牌? 我知道在基于浏览器的客户端上设置严格的内容安全策略可以有效地防御xss攻击。 但是,我仍然对将令牌存储为cookie或本地存储感到疑惑。

我知道oauth2通常是用户身份验证的一个很好的解决方案,并且我已经考虑过使用它来处理此问题。 虽然,我正在使用Flask编写API,并且还在使用JSON Web令牌。 就目前而言,在使用oauth进行身份验证时,Flask的oauth2实现无法使用JWT作为访问令牌。

这是我不得不处理此问题的第一个大型项目,我不确定该怎么做。 任何帮助,建议或批评都将受到赞赏。 我现在需要帮助。

将API网关放在您的API之前,您的API网关是公开的(即在DMZ中),而实际的API是内部的。

你可以看看孔..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM