我目前正在使用客户端 React 组件让用户通过我的应用程序中的 OAuth 登录 Facebook。在服务器端,我使用 npm 包护照 Facebook 令牌 https://github.com/drudge/passport-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 的访问令牌,还需要知道它所属的电子邮件。这是一种过度设计的方法吗?
确实是我能想到的制作 OAuth 的最佳方式accessToken
而不易被暴力破解的“code”值是使用加密数字生成器创建一个 128 位长度的随机数据字符串,并使用 Base 64 对其进行编码以用作您的代码。计算机或重定向到授权端点和从授权端点重定向的人极不可能猜到它。redirect-uri
带有查询参数。
另一种防御方法是通过 IP 地址限制授权率(您可以这样做,而不是通过 Node.js 发送电子邮件),但这对于大多数装备精良的黑客来说通常不是问题。我强烈建议使用第一种方法来创建更安全的服务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)