gpt4 book ai didi

javascript - 使用 CORS 和本地策略将客户端应用程序验证到 REST API

转载 作者:IT老高 更新时间:2023-10-28 21:55:51 25 4
gpt4 key购买 nike

问题:

仅使用本地身份验证策略为客户端应用提供安全 API。
红色箭头是知识鸿沟的一部分。

enter image description here

上下文:

那就是 --- client.example.com 正在向 api.example.com/login 发送 POST 到成功 client.example.com 可以访问 GET 服务,例如 api.example.com/secret

一个想法!

使用位于 API 前面的混合授权类型实现 OAuth 2.0。

为什么是混合动力?

  • 它不会是 Implicit Grant Flow 又名 Client-Side Web Applications Flow,因为没有重定向到 API 服务器也授予访问 token 。 (即)“某某可以访问您的数据吗?”

  • 它不会是 Resource Owner Password Flow,因为 Client ID 和 Client Secret 随请求一起传递,因此假定客户端应用程序是服务器端。

好的...那么两者都用一点呢?

如果我们在客户端应用程序的页面加载中使用 CRSF token ,并使用用户凭据 POST 它,OAuth 2.0 身份验证端点以交换访问 token 怎么办?成功登录后,您将使用访问 token 和 CRSF token 对每个后续请求进行身份验证。

我发现了一个不错的 Node.js OAuth 2.0 库:

https://github.com/ammmir/node-oauth2-provider

帮帮我!

我找不到解决此问题的身份验证措施的工作示例!指出我正确的方向?

Ultimately, the goal here is too authenticate a client side app to a REST api using CORS with a local strategy --- i.e. username & password --- even if the convention above isn't possible.

容纳赏金:

这是一个客户端应用程序,所以让我们保持时尚。

我正在寻找一个使用上述 Node.js OAuth 2.0 种子的 API/Auth 服务器和前端框架(如 Angular.jsBackbone.js 发出请求。

示例应与上述上下文相匹配。

最佳答案

我正在开发一个架构非常相似的应用程序,尽管服务是 .NET Web API 而不是 Node,并且我们使用 DotNetOpenAuth 作为 OAuth 提供程序。而不是您建议的混合方法,我们正在执行以下操作:

  1. x.com 提供登录页面
  2. 登录页面将凭据回传到 x.com
  3. x.com 的服务器端逻辑将 client_id 和 client_secret 与凭据结合以提交 token 请求(您已使用的 resource owner password credentials grant上面提到的)接收一个临时访问 token 和一个刷新 token
  4. 刷新 token 被加密到 x.com 发布的 cookie 中
  5. cookie(带有加密的刷新 token )和临时访问 token 随后都会发送到浏览器
  6. 客户端应用程序(在我的例子中是 angular)现在可以使用访问 token 访问 api.x.com 以获取服务(看来您很清楚 CORS 的局限性......我们破解了 angular 的 $resource 版本为了促进这一点,但它并不漂亮,因为我们想使用所有 HTTP 动词并支持 IE9)
  7. 当访问 token 过期时,客户端应用可以从 x.com 请求新的访问 token
  8. 在服务器端,x.com 解密 cookie 以获取刷新 token 并发出另一个 oauth 调用以获取新的访问 token

这是相当高级的,但希望能让您了解如何处理您的情况。就我而言,它出现在您的案例中,我们不想使用 session 状态或数据库来存储刷新 token ,但显然将其暴露给浏览器会引入安全问题,因此刷新 token 的加密很重要(以及其他安全性注意事项)并且使用 cookie 消除了对 session 状态或 x.com 上其他持久存储的需要。

关于javascript - 使用 CORS 和本地策略将客户端应用程序验证到 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15286324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com