使用Angular.js和iOS客户端对Node.js应用程序进行身份验证

  发布于 2023-01-31 20:12

我试图尽可能多地阅读不同的答案和帖子,但我仍然不能满足于满足我需求的解决方案.我正在努力找出最好的(最有效的,但更安全的)方式来处理用户身份验证,登录等.

我有一个在Express上运行的Node.js服务器; 我有一个Angular.js网络应用程序; 我有一个iOS应用程序.我使用Express/Node.js公开了一个RESTful API.

饼干

我读到的第一件事说是使用cookie,并在服务器端(散列)和客户端(未散列)存储会话ID /登录令牌.客户端将使用每个请求传输此id,服务器将对其进行哈希处理,解析并相应地处理请求.这不会感觉RESTful(不是一个大问题),但更重要的是,我是否必须复制我的API:一个用于用户名/密码验证(例如通过curl完成)和一个用于基于cookie的验证(例如我的网络应用程序)?

另一个问题是:如果我有一个用户的多个连接,我会怎么做,例如他们登录了两个浏览器,一个iPhone和一个iPad.我的会话ID存储现在需要是一个数组吗?

HTTP Basic Auth

下一个想法是使用HTTP Basic Auth(使用SSL),这似乎很容易,但不推荐使用,因为您需要为每个请求传输用户名和密码.如果我使用HTTP Basic Auth进行操作,那么我是否会将用户名和密码存储在cookie(或HTML本地存储)中以允许"记住我"功能?或者我可以将两者结合起来:对实际请求使用HTTP Basic Auth(发布新帖子等),只使用存储在cookie中的会话ID进行初始登录顺序/记住我的方面?

传输会话ID比传输用户密码更安全吗?怎么样?会话ID将表面上作为密码,因此对我来说,传输它会产生与传输密码相同的安全问题.

所有平台似乎都支持Basic Auth,这是理想的选择.主要缺点似乎是需要随每个请求传输客户端身份验证数据.有没有办法缓解这个问题?

OAuth的

OAuth对我的需求似乎有些过分.我想我将无法使用curl命令来测试我的API.OAuth如何改进cookies方法?

你可能会说,我对可用的各种信息感到有些困惑,所以如果你有一套好的链接 - 适用于这种情况 - 我很乐意阅读它们.我正在尝试找到适合所有平台的解决方案,但仍然尽可能安全.此外,如果我的任何术语有错,请更正我,因为它会让我更容易搜索.

谢谢.

更新:

我一直在想这个问题,我有一个想法.如果这是愚蠢/不安全/任何反馈,请告诉我,因为我不确定它是否好.

当用户登录时,我们生成随机会话ID(盐渍等).此可选会话ID被发送到客户端,客户端可以选择存储(例如,在cookie中); 会话ID存储在数据库中.

然后,此会话ID可选地与每个请求一起作为HTTP身份验证标头或查询字符串发送,或者客户端可以根据需要发送用户名和密码(这为我们提供常规REST API).在服务器端,我们首先检查会话ID参数,如果它不存在,我们检查用户名/密码.如果两者都没有 - 错误.

在服务器上,我们检查会话ID是否与正确的用户名相关联.如果是,我们完成请求.

每次用户登录时,我们都会创建一个新的会话ID或删除当前的会话ID,并将其与响应一起发送给登录请求.

我认为这可以让我在适当的情况下使用常规REST API和Basic Auth,并维护会话/记住我的功能.它没有解决多个登录问题,但我认为应该这样做.请告诉我.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有