相关疑难解决方法(0)

FB身份验证的正确方法

我的项目使用Node.js和Express,但问题是关于通用方法.

我们的用户都来自FB,我们除了FB之外没有任何身份验证.我们需要将某些操作与特定的FB用户关联起来,并且还需要他们的令牌与FB通信.

目前我们这样做:

  • 用户来到该页面
  • 隐形块:一个带有占位符,用于用户的头像和名称('登录'),另一个带按钮触发FB登录('登出')
  • 使用FB JS SDK我们检查用户的登录状态.如果连接(实际上意味着:登录到FB,验证我们的应用程序并提供我们需要的所有权限),我们将获得用户名和FB ID并显示"已登录"块.否则显示"已注销"块
  • 对于某些操作的登录用户,用户的access_token通过AJAX传递给服务器(不用担心,此处为HTTPS),并由服务器代码用于发布到用户墙壁或其他任何操作
  • FB登录按钮由JS处理并调用FB.login()
  • 在JS authResponseChanged事件中采取明显的操作(显示/隐藏登录/退出块)

什么是好的:我们总是知道用户的状态是有效的(令牌的TTL超过了正常页面的生命周期,所以我们在这里很好).

我们不太喜欢:*客户端令牌是短暂的(是的,我们可以交换它们,但如果我们可以找到任何替代方案,我们不想)*它通常需要多次FB请求(1 - 加载JS SDK,2 - 获取登录状态),直到我们可以展示一些东西.直到我们网站的"登录"区块为空.

问题是什么?

我们正在寻找一种在这里使用某些服务器端代码的最佳方式,并且当我们确定用户已登录时,至少会呈现用户的名称和头像.

我可以想象一些像这样的方案:

  • 使用服务器端身份验证(带重定向)来获取长生命令牌并将其保留在服务器上
  • 在会话中保存用户的状态(登录/注销,FB ID,名称)
  • 如果会话具有登录状态,则在处理服务器上的模板时呈现名称和头像

关注点:

  • 如果用户从FB注册或撤销了App权限,我们应该如何知道它以及何时应该检查它(检查每N个请求?每X小时一次?只检查令牌是否会在Y小时内到期?)
  • 如果我们在渲染任何模板之前检查用户的状态(在官方示例中就是这种情况),这会减慢速度,对吧?因为我认为FB API调用在炎热时段可能会相当慢.

javascript facebook node.js

13
推荐指数
1
解决办法
1398
查看次数

如何在使用Facebook Javascript SDK时验证用户登录

我已经解决了这个问题,但我的问题不同了.我不确定javascript登录如何确定,以及其他人如何不登录其他帐户.

根据入门 FB.authResponse是在登录成功时调用,但当然在客户端.

然后我们可以得到userIdaccessToken退出响​​应,我们也可以打电话/me获取更多信息.为了将该用户置于会话中,所有关于成功javascript登录的信息必须被发送到服务器,这是我感到困惑的地方.毕竟它是HTTP,每个其他请求都是不同的,可以复制.

可能只是因为我很困惑,关于某人如何不能破解并模仿任何其他用户的脸书ID来登录他的帐户.

例如,在身份验证成功之后,我对我的服务器进行ajax调用,提供fb-user-id然后我将其与数据库匹配并将相应的用户放入会话中,但不是因为这是fb-user-id在后端没有再次验证(或者它是否经过验证?,我没有找到任何关于它的信息)这个特定用户是实际注册我的应用程序的用户,然后是与其他人的fb相同的登录请求-user-id可以登录到他的帐户.

我敢肯定,我不是第一个有这种困惑的人.请帮助清除这种混乱,因为我现在已多次阅读文档,但仍无法弄清楚为什么其他人无法登录其他人的帐户.

编辑 我发现了这个,similar question但这里的人没有回答他如何验证后端登录或可能是我无法理解.

facebook login facebook-graph-api facebook-javascript-sdk

7
推荐指数
1
解决办法
3165
查看次数

如何在 .NET 中使用 Facebook signed_request?

我使用 Facebook 作为我的 Web 应用程序 (ASP.NET MVC) 的登录提供程序。

我的登录方式类似于 StackOverflow 的另一篇文章How to secure authorize a user via Facebook's Javascript SDK。我也分享用户的担忧。

我的登录流程如下:

1. 用户按下登录按钮。

使用 Facebook 登录

2. 用户必须接受该应用程序。

接受应用程序

3. javascript 回调检索响应。

var authResponse = response.authResponse;
Run Code Online (Sandbox Code Playgroud)

返回的对象:

{
    accessToken: "...",
    expiresIn: 1234,
    signedRequest: "...",
    userID: "123456789"
}
Run Code Online (Sandbox Code Playgroud)

我听说我可以使用signed_request来验证用户的请求,但网上的所有示例都是针对 PHP 的我如何在 .NET 中执行此操作?

c# asp.net-mvc facebook-javascript-sdk facebook-login asp.net-mvc-5

5
推荐指数
2
解决办法
812
查看次数