rest - 为单页 JS 应用程序保护 REST API?

标签 rest authentication oauth sinatra oauth-2.0

我对使用 Sinatra 开发 RESTful JSON 数据 API 感兴趣,并且有一个 HTML5/JS 应用程序使用该数据 API。显然,数据 API 需要某种形式的身份验证,以便用户 Joe 只能通过 API 访问他自己的东西。如果我不能推出自己的身份验证,而是依靠 Google/Facebook/Twitter 作为身份提供者,那就太好了。

我已经使用 Omniauth 研究过 OAuth2,我可以很容易地将它连接到传统的 Web 应用程序,但是当谈到使用 FB/Twitter/Google 保护 JSON API 时,我的理解崩溃了,因为:

  • API 不应该真正为 OAuth2 流做重定向,对吗?
  • 当来自身份提供者的回调数据通过时,它可能会命中 HTML/JS 应用程序,对吗?

  • 如果我想通过非 Web 机制为 3rd 方开发人员提供 API 访问,那么另一个问题是; OAuth2 重定向流业务在这里肯定行不通。

    总而言之,我有一个看起来像这样的架构:
    [ HTML/JS client ] --- [ JSON API  ]       [ FB/Twitter/Google ]
                                |
                                |
                           [ Developer ]
    

    实际上,我所追求的是这里的内容,除了这仅适用于 Rails:
  • sso-devise-omniauth-provider

  • 使用 Sinatra 执行此操作的任何指示?请举一些具体的例子。

    最佳答案

    好吧,你已经把自己画到了一个角落里。 OAuth 身份验证的一个前提是,用户将在 HTTP 客户端(例如 Web 浏览器)中执行操作以向 OAuth 提供者验证自己的身份。如果您想通过非 Web 机制为 3rd 方开发人员提供 API 访问,那么您不能使用那种身份验证流程。

    如果要对不适合交互式基于 Web 的身份验证模式的 API 客户端进行身份验证,则需要遵循 API key 模式。您需要以某种方式生成 API key 并将它们分发给授权的 3rd 方开发人员。看看 Twitter、Facebook 和 Google 是如何做到的。

    关于rest - 为单页 JS 应用程序保护 REST API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17036667/

    相关文章:

    java - 在以 JSON 格式发布到 API 时,如何正确发送值中包含 double 和字符串的 HashMap

    rest - HTTP 响应 header 的约定,用于通知客户端已弃用的 API

    node.js - 无法使用 bcrypt 登录用户(dyld : Symbol not found)

    authentication - golang中的单点登录认证

    c# - 使用 C# 桌面应用程序的 OAuth 用户代理流程

    REST API - 如何处理 PUT 方法中的可选参数? PATCH 方法的实现有什么不同

    java - HttpServlet 类与 Jersey 的混淆

    javascript - 提示浏览器登录不正确

    authentication - 更改用于 TF 命令行的登录帐户

    php - 我需要帮助使用 PHP 对使用 OAUTH 2 的 API 进行身份验证