服务器端验证 Facebook 用户

2023-12-31

我正在编写一个 Facebook 应用程序,其中列出了用户的朋友,并与用户提供的有关他们的信息(存储在 Google App Engine 数据库中)进行交叉引用。我的应用程序的运行方式如下:

用户登录 Facebook 后,通过 Facebook 的 Javascript SDK 进行 Graph API 调用,以获取其好友列表。同时,AJAX 请求会与用户的 Facebook ID 一起发送到我的 Google App Engine 请求处理程序,处理程序会发回一个 JSON 对象,其中包含来自数据库的有关用户朋友的信息。然后在用户计算机上交叉引用这两个列表。

这种方法中明显的安全缺陷是,任何人都可以使用任意人的 Facebook ID 向我的处理程序发送请求,而无需以该人的身份登录 Facebook,并获取该人提供的有关其朋友的所有信息。毕竟,Facebook ID 是公开的。

我能想到的确保服务器端用户身份的唯一方法,除了实现我自己的登录系统之外,就是在 AJAX 请求中包含用户的访问令牌,因为访问令牌是用户登录 Facebook 的证明。然后,请求处理程序可以向 Facebook Graph API 发出虚拟请求以验证其是否有效。但是,这似乎很棘手,而且我不确定如何处理访问令牌在传输到 App Engine 服务器时过期的可能性。我也调查过脸书Python SDK https://github.com/pythonforfacebook/facebook-sdk,尽管我不确定这有什么帮助。

App Engine 服务器如何验证 Facebook 用户是否登录到我的 Facebook 应用程序?


尝试使用签名请求而不是发送普通的 facebookID - 那么您可以使用 Facebook APP 页面上给出的 Secret_id 在服务器上对其进行解码。那么没有人能够向您发送“假”查询,因为它们将无法在服务器端解密。

例如,我有一个允许用户对给定条目进行投票的应用程序。用户接受权限后,我使用 JavaScript 将他的投票发送到服务器:

$.ajax({
            type: "POST",
            url: base_url + 'vote/send',
            data: { signed_request: response.authResponse.signedRequest, vote:vote },
});

在服务器端,我正在解码signed_request以获取用户FacebookID并将其存储为合法投票...这样,没有人能够向我发送假投票,因为signed_request以这种方式加密,只有我的应用程序是这样的能够解码它。

响应当然是对象,它来自用户批准使用应用程序的权限后的SDK。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务器端验证 Facebook 用户 的相关文章

  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse
  • 如何为 Windows toast 注册协议?

    如何注册 Windows toast 协议 样本中来自https blogs msdn microsoft com tiles and toasts 2015 07 02 adaptive and interactive toast not
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • Android ScrollView fillViewport 不工作

    我有一个简单的布局 名称位于顶部 按钮位于屏幕底部 或者超出该按钮 以防我添加更多项目 所以我使用带有 LinearLayout 的 ScrollView 如下所示
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d
  • 在 Android 中使用 iText 将图像添加到特定位置

    我想使用 Android 中的 iText 将图像添加到 PDF 文件中的特定位置 这是一个可填写的表单 我添加了作为图像占位符的文本框 我想要做的就是像这样获取该文本框和图像 public class FormFill public st
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • NGinx $proxy_add_x_forwarded_for 和 real_ip_header

    我在 NGinx 下有一个 web 应用程序和另一个前端负载均衡器 如下所示 x x x x IP 地址 客户端 a a a a gt LB b b b b gt NGX c c c c gt WEBAPP d d d d 这是我的 NGi
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 带显示块的SPAN

    和默认有什么区别 div 元素和默认值 span 元素与display block HTML 元素的有效性和语义存在差异 否则它们是相同的 div and span两者都被定义为通用容器 在 HTML 方面没有更深层次的含义 一个默认为块显
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 使用泛型全面实现特征

    我正在通过实现矩阵数学来练习 Rust 但遇到了一些障碍 我定义了我认为与矩阵相关的特征 trait Matrix
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function
  • CUDA 中指令重放的其他原因

    这是我从 nvprof CUDA 5 5 获得的输出 Invocations Metric Name Metric Description Min Max Avg Device Tesla K40c 0 Kernel MyKernel do

随机推荐

  • R 合并 data.frames asof join

    我有一大堆时间间隔不规则的 data frames 我想创建一个新的 data frame 并将其他 data frame 加入其中 对于加入的每个 data frame 从新的 data frame 中选择最新的值 例如 下面的 list
  • 使浮动 div 保持在同一行

    如何将两个元素保留在同一行并固定右列 我希望右侧 div 具有固定大小 左侧列流体 但是当在左侧插入长文本时 右侧 div 会转到下一列 例子 http jsfiddle net Jbbxk 2 http jsfiddle net Jbbx
  • 在排序更改事件期间更新排序顺序 - jQuery UI

    我希望列表元素的值是排序事件期间排序位置的索引 该值应在排序更改事件期间自动更新
  • 向 Scala 案例类添加字段?

    我看过一些关于Pimp my Library pattern 这些似乎对于向类添加行为效果很好 但如果我有一个case class我想要add data members到它 作为一个案例类 我无法扩展它 从案例类继承已被弃用 强烈反对 这些
  • 如何在 Swift 中实现与 Strongify 相同的行为?

    我有一个 self 较弱的闭包 我需要确保 self 在闭包执行期间被保留 并在执行完成后由闭包释放 之前它是由 strongify 完成的 在 Swift 中还有其他方法可以做到这一点吗 虽然其他答案有效 但另一种选择是使用反引号 这样做
  • Akka.Net Streams 和远程处理 (Sink.ActorRefWithAck)

    我使用 Akka net Streams 做了一个非常简单的实现Sink ActorRefWithAck 订阅者向发布者请求一个大字符串 发布者通过切片发送它 它在本地 UT 工作得很好 但是不远程 我不明白出了什么问题 具体来说 订阅者能
  • 如何在 Django 中拥有这样的 URL?

    我怎样才能有这样的网址example com category catename operation 在姜戈 此外 在某些情况下 用户输入空格分隔的类别 我该如何处理 例如 如果用户输入 我的家 类别 则该类别的 URL 将变为exampl
  • 在 Azure Cosmos DB 中使用 Gremlin 重命名属性

    我们的一些代码库已经更改 因此它现在期望过去具有名称为 Sdg 的属性的顶点现在具有名称为 causeType 且具有相同值的属性 简而言之 财产的重命名 在这一点上我已经尝试了很多 而且 令我有点惊讶的是弄清楚如何搜索图表并在需要时进行重
  • 即使 JSON 已建立索引,查询中是否也需要分区键

    我计划使用 Cosmos Db 文档 Db 并且尝试了解查询 索引和分区如何相互关联 如何在 Azure Cosmos Db 中进行分区和缩放 https learn microsoft com en us azure cosmos db
  • 带有要排列的行的标量

    如何转换包含数组中带有换行符的字符串的标量 并将这些行作为元素 例如 考虑到这一点 lines line 1 nline 2 nline 3 n 我想检索这个 lines 0 gt line 1 n lines 1 gt line 2 n
  • 有什么办法可以在网页上显示C++吗?

    有没有一种相对简单的方法可以在网页上显示 C 程序的输出 我并不是指手动 换句话说 您在网页上看到它 因为它运行 而不是像我制作代码标签并自己编写它一样 编辑 为了让每个人都能清楚地了解这一点 我将把它发布在这里 我不想用 C 制作网页 如
  • 根据索引初始化 MATLAB 矩阵

    我正在尝试创建一个满足以下条件的矩阵 M M i j f i j 对于一些f 我可以通过说进行元素初始化M zeros m n 然后循环 例如 八度 M zeros m n for i 1 m for j 1 n m i j i j 2 e
  • 如何将 C# 文档生成为 CHM 或 HTML 文件?

    有没有办法直接从 Visual Studio 中从代码文档生成可读文档文件 也考虑2010年 代码示例
  • 在父类中记录静态方法

    我有一个抽象类 Parent 有 2 个子类 A 和 B Parent 有一个名为 do 的静态方法 我想知道是否有一种方法可以让该静态方法在 A 类被称为 A do 时在 Logger 中添加日志信息 在被称为 B do 时在 Logge
  • PHP Exception::getCode() 与其实现的 Throwable 接口相矛盾

    我发现了一个我无法理解的矛盾 异常 getCode https www php net manual en exception getcode php 有这样的定义 final公共异常 getCode 无效 mixed 附说明 返回异常代码
  • 什么存储位置(SQL Server 或文件系统)可以提高保存 tiff 图像的性能?

    我们的系统需要存储大小约为 3k 的 tiff 图像 我们在给定时间收到约 300 张图像 需要快速处理它们 一旦收到约 100 000 张图像 这些图像就会从我们的系统转移到另一个存档系统或被清除 我正在寻找图像文件初始保存的最佳性能 传
  • 有没有关于 gremlin 'match()' 如何工作的文档?

    我正在用 match 遍历编写 gremlin 查询 某些模式匹配的行为似乎与其他模式语言不同 输入遍历器值如何与模式变量绑定 g V A B match as x as y project x y gt x v A y v A gt x
  • 使用summary r 进行逻辑值计数

    在数据框中 我有一列包含 Y 和 N 值 该数据框还有一个 id 列 我想创建两列 一列包含 Y 总数 另一列包含每个 id 的 N 总数 我尝试使用 dplyr summarise 函数执行此过程 group by id gt summa
  • Polymer 2.0 webcomponents-loader.js 缺少 Edge polyfill

    我们目前将项目从 Polymer 1 更新到 Polymer 2 混合版本 我知道 webcomponents hi sd ce js 是 Edge 的 polyfill 在 Microsoft Edge 上测试页面时 我现在收到一条错误
  • 服务器端验证 Facebook 用户

    我正在编写一个 Facebook 应用程序 其中列出了用户的朋友 并与用户提供的有关他们的信息 存储在 Google App Engine 数据库中 进行交叉引用 我的应用程序的运行方式如下 用户登录 Facebook 后 通过 Faceb