Facebook OAuth安全使用护照-facebook

问题描述 投票:0回答:1

我目前正在使用一个客户端的React组件,让用户在我的应用程序中通过OAuth登录Facebook。在服务器端,我使用了npm包。护照-facebook-token 的真实性,以验证 accessToken 客户端登录成功后。

有一个我不常看到的做法是,除了询问Facebook是否有 accessToken 是有效的,那么服务器是不是也应该检查客户机的有效载荷提供的邮件是否与Facebook发回来的邮件相匹配呢?请允许我用定义的客户端服务器技术来说明我的问题。

1)用户在客户端使用React组件进行Facebook认证。

2)React组件成功与Facebook进行认证,并向服务器发出HTTP请求,请求中包含访问令牌和用户的邮件。

3)服务器运行Node.JS和passport-facebook,现在需要直接从Facebook验证访问令牌的真实性。Facebook并不关心电子邮件。它只会验证访问令牌。

4)Facebook向Node.js返回一个响应,确认访问令牌的真实性。响应还包含用户的其他元数据,包括他们的电子邮件和其他档案数据。

我的问题是,Node.js是否应该把同样从Facebook的访问令牌验证有效载荷中返回的电子邮件,并验证它是否是React客户端返回的内容?这样做是否可以防止有人通过蛮横的方式强行获取一个新的邮件?accessToken 并要求他们不仅要有 accessToken 但也知道谁是 accessToken 属于什么?这可以防止用户向Node.js服务器提交一堆HTTP POST请求,尝试不同的访问令牌。他们不仅要猜测分配给应用程序的clientID的访问令牌,还要知道它属于哪个邮箱。这是不是一种过度设计的方法?

facebook security authentication oauth-2.0 facebook-oauth
1个回答
0
投票

真的是我能想到的让你的OAuth最好的方法了。accessToken 和'代码'值较不容易被粗暴强迫的方法是使用加密数字生成器创建一个128位长度的随机数据字符串,并将其用64基编码作为你的代码。它极不可能被计算机或重定向到授权端点和从授权端点转出的人猜到。redirect-uri 与查询参数。

另一种强化方法是通过IP地址限制授权率(你可以通过Node.js来代替电子邮件),但这对大多数装备精良的黑客来说通常不是问题。我强烈建议采用第一种方法来创建一个更安全的服务。


0
投票

你验证电子邮件以及令牌的方法有点多余,因为Facebook的 不透明的 用户访问令牌本质上是与电子邮件挂钩的。

脸书

访问令牌是一个不透明的字符串,用于标识用户、应用程序或页面。

"不透明 "由Auth0定义。此处

不透明访问令牌是一种专有格式的令牌,通常包含服务器持久存储中信息的一些标识符。

在您的案例中,标识符是用户的 电子邮件,而服务器属于Facebook。

我将进一步阐述。下面是你的步骤与一些编辑。

  1. 用户在客户端使用React组件来验证Facebook的身份,输入他们的身份信息 电子邮件密码 直接到Facebook. React组件获得token 来自Facebook 登录成功时。

  2. React组件成功通过Facebook认证,并向服务器发出HTTP请求,请求中包含访问令牌和用户的电子邮件。

  3. 服务器运行Node.JS和passport-facebook,现在需要直接从Facebook验证访问令牌的真实性。Facebook并不关心电子邮件。它只会验证访问令牌的真实性 因为令牌 已与 电子邮件.

  4. Facebook会向Node.js返回一个响应,确认访问令牌的真实性。响应还包含用户的其他元数据,包括他们的电子邮件和其他配置文件数据。

这个 是Facebook的bug赏金计划。如果他们的OAuth真的被破解到需要二次邮件验证的程度,通过这个奖励措施,几乎马上就会被修复。

© www.soinside.com 2019 - 2024. All rights reserved.