【问题标题】:How to authenticate Rails application using token from 3rd party API?如何使用来自 3rd 方 API 的令牌对 Rails 应用程序进行身份验证?
【发布时间】:2013-10-15 20:52:40
【问题描述】:

我有一个 Rails 应用程序,它对第三方 API 进行多次特定于用户的调用。他们在填写调查的过程中与大量数据交互,他们的进度存储在 HTML5 localStorage 中,直到他们到达调查结束,数据保存在本地数据库中并清除 localStorage。

API 调用需要在末尾添加一个标记作为“auth=”参数。现在,我让用户使用他们对该服务的用户名和密码登录我的应用程序,将这些凭据发布到该 API 的“会话”调用,并以 JSON 格式获取令牌。我将该令​​牌存储在控制器中的一个变量中,并使用它来进行连续的 API 调用并在我的应用程序中呈现用户的数据等。

我已经了解了很多关于 Rails 的知识,但对会话或身份验证几乎一无所知。一般来说,我还需要做些什么才能让这成为一个安全的场景吗?我觉得我错过了什么。

【问题讨论】:

  • 只要我理解正确,我认为没问题。要做的一件事是确保您在生产环境中使用 HTTPS。可以看一下 Rails 3.1 force_ssl 方法,这很容易。在我的工作中,当用户登录时,我们从 facebook 获取访问令牌,并将该令牌存储在会话中。然后我们将向 facebook 的 api 发出请求。我唯一关心的可能是将个人信息存储在本地存储中,而不是将其加密在您的数据库中,但本地存储可能没问题,我只是不熟悉从安全角度来看它是如何工作的。
  • 关于 localStorage 的要点。 (我不打算将令牌存储在那里,存储在那里的数据只是用户正在完成的调查的“进度标记”。)
  • 啊,好吧。我不确定您是否存储了可能包含个人信息或其他内容的输入字段,我认为您在这方面做得很好。状态的本地存储是一个很好的用例。

标签: ruby-on-rails api session authentication


【解决方案1】:

假设 3rd 方服务的用户名/密码组合没有访问您的服务器,我觉得没问题。

如果您的服务器看到用户的凭据,那并不是很酷。而是使用 OAuth 获取第 3 方登录,并使用令牌代表用户发出请求。如果要避免将用户保存到数据库,通常可以将整个会话保留在客户端上。

顺便说一句,在本地存储中存储进度听起来不错。要保留值,您可以将表单的页面设置为选项卡(因此隐藏以前的表单,而不是新页面)并使用:

autocomplete="on"

表示值应该恢复到原来的样子。在编写代码以将内容保存到本地存储之前尝试一下。

【讨论】:

    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2020-03-25
    • 2022-01-05
    • 2018-05-21
    相关资源
    最近更新 更多