design-patterns - 安全地检查用户是否登录到另一个域 (JSONP)

标签 design-patterns authentication facebook security

就我的问题而言,假设有一个网络应用程序和一个位于不同域的网站。用户可以登录 Web 应用程序,这会在整个 session 期间保持用户登录状态,或者如果用户希望被记住 30 天,则可以使用 cookie。非常标准。

现在,我需要从站点检查用户是否登录到 Web 应用程序(在不同的域中)。我显然无法直接访问浏览器的 session 或网络应用程序的 cookie。我相信我唯一的选择是从站点的 JavaScript 向 Web 应用程序域上的 URL 发出 JSONP 请求。然后,Web 应用会根据用户是否登录以 1 或 0 进行响应。我的方向是否正确?无论哪种方式,我都可以发出 JSONP 请求并轻松获得响应。

虽然我在 JavaScript 中有 1 或 0 登录值,但我需要访问网站后端代码(Ruby、PHP 等)中的值。现在我们真正进入了我的问题的核心。这个值可以通过 JavaScript 存储在 cookie 中,但是什么能阻止恶意用户手动设置这个 cookie?我如何安全地将此值从 JSONP 响应传输到我的后端代码?

一些最后的说明:

  1. 我无法从站点的后端代码(Ruby、PHP)向网络应用程序 URL 发出请求,因为用户代理是服务器,而不是网络应用程序知道是否登录的浏览器。
  2. 我相信 Facebook 登录/连接的工作原理与此类似,但很难理解代码中发生的所有事情。模式的解释(如果它是一个模式)将是最有帮助的!

感谢您的帮助!

最佳答案

我想到的第一件事是让网络应用程序不仅返回 0 或 1,还返回某种加密 token ,然后可以在另一个域的服务器端检查该 token 。它可以是一些非常简单的东西,比如 md5('somethingsecret'.$userid) 除了登录状态。当您的外部站点后端从其前端 javascript 获取 cookie 时,只需制作相同的 md5 并比较值以确保没有人伪造用户 ID。

关于design-patterns - 安全地检查用户是否登录到另一个域 (JSONP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7393959/

相关文章:

javascript - 更改 react 状态的单个变量

mysql - 即使 SQL 查询找到行,Cakephp Auth 登录也会返回 false

android - 从基于 GAE 的应用程序获取 Auth Cookie 的正确 URL 是什么

IOS Facebook Auth - 保持好友列表更新

CSS定位图片彼此相邻

php - 如何从 Facebook 页面选项卡的内部页面共享内容?

c# - 主机单例

c# - 如何返回对尚不存在的对象的引用?

java - 如何使用 protected 方法为 Java 类实现装饰器模式

ruby-on-rails - 谷歌身份验证错误 Ruby on Rails