在浏览器中使用Javascript进行REST API身份验证
REST API Authentication from Javascript in the browser
我正在尝试编写一个基于REST的无状态API,我计划从几个不同的地方使用它,其中一个将是单页Javascript web应用程序。这个想法基本上是让不同的客户端使用一个API——包括可能由其他人编写的,但仍然可能需要访问用户数据的客户端——而不是为不同的客户端使用不同的API。
我目前遇到的问题是身份验证。理想情况下,我想在这里使用一些标准的东西,而不是自己制作,但我正在努力找到一些真正适合的标准。我还试图避免根据呼叫方不同而使用不同身份验证机制的解决方案。在这个阶段,我实际上不需要比实际使用应用程序的用户身份验证更多的东西-通过用户名和密码,或类似的-但如果/当客户端不是网页想要使用它时,他们可能也应该进行身份验证。
从我一直在看,似乎最好的方法来做到这一点,实际上只是使用HTTP基本身份验证在HTTPS连接。我不禁认为这是遗漏了一些东西。明显的替代方案似乎是OAuth 1.0 -它要求潜在不安全的Javascript会话知道客户端秘密-或OAuth 2.0 -它似乎回到使用SSL的用户名/密码来生成访问令牌,然后在SSL的未来请求中再次使用该访问令牌,这基本上与HTTP基本相同,但有点模糊。
请注意,我没有计算HTTP摘要在这里,只是因为-正如我所理解的-传递给服务器的是包括密码在一个不可检索的形式(即散列),如果我存储的密码在后端在一个不可检索的形式,那么我不能比较两者…
我将创建一个单独的API来处理用户登录。你的API客户端(一个JS网页)可以通过HTTP Digest + SSL向这个登录API提交用户名/密码。然后,API将对用户存储(数据库或文件等)执行登录,并返回结果-已批准/拒绝访问。
如果被批准,它应该返回一个经过身份验证的令牌(例如,在用户名+密码+角色+权限+日期时间或其他任何内容上的单向哈希函数)。
你的JS客户端(通过浏览器)的所有后续请求将需要提交这个令牌(它将在用户会话对象中携带,也许在加密的cookie中)到你正在与之交互的所有api。该令牌可以设定过期时间,过期后用户将被强制重新登录。
这种方法保持无状态,但有一些问题。如果登录令牌被盗或被用户共享怎么办?在令牌的生存期内,任何拥有令牌副本的人都可以假装是您的用户(中间人)发起查询。SSL应该防止它成为消息的最外层信封。
我可以想象在你的REST(业务)API和REST(登录)API之间做某种握手。因此,当您的REST业务API接收到这个令牌时,也许它可以要求登录API验证它是否创建了这个令牌,以及为什么用户代理创建了这个令牌。
无论如何,对于简单的应用程序,上述方法应该足够了。
- 使用Javascript客户端进行REST基本身份验证的安全缺陷是什么(如果有的话)
- 在使用Protractor进行测试时,我可以用json文件替换结果,而不是调用实际的REST端点
- 使用 feathersjs 通过简单的 rest 调用进行身份验证
- 如何使用 Javascript 对 SharePoint REST 调用进行身份验证
- 如何决定和进行与父子关系对应的 REST 调用
- 基于浏览器的应用程序使用 REST 服务进行身份验证
- Azure Table Storage 通过 javascript 对 REST 调用进行身份验证
- Yammer REST API 从不同的页面进行不同的调用
- 如何使用Eclipse进行Spring REST开发,以及用于JavaScript/前端开发的编辑器等括号
- 使用jQuery进行API Rest调用
- WordPress REST API-允许任何人进行POST
- 如何使用Javascript/JQuery使用X509证书进行REST请求
- 有没有一种正确的方法可以确保一次只有一个用户使用REST+HTTP对对象进行更改
- 使用angular js客户端对Python服务器进行rest调用的例子
- 在浏览器中使用Javascript进行REST API身份验证
- AngularJS进行REST调用并在浏览器中显示结果
- 在JavaScript中进行REST调用,而不使用JSON
- 使用誓言、tobi和node.js进行REST API测试
- 如何正确地从ReactJS+Redux应用程序进行REST调用
- Javascript - 如何进行 REST API 调用