gpt4 book ai didi

facebook - 使用 Facebook OAuth 保护 Rest API 端点的可能方法

转载 作者:行者123 更新时间:2023-11-30 05:14:43 25 4
gpt4 key购买 nike

我已经阅读了很多关于该主题的文章,但我发现的都是过时的或部分答案,它们对我的帮助不大,实际上只会让我更加困惑。我正在编写一个由 Web 应用程序(托管在与 API 相同的域中)和 Android 应用程序访问的 Rest API(Node+Express+MongoDB)。

我希望 API 只能由我的应用程序访问,并且只能由授权用户访问。我还希望用户能够仅使用他们的 Facebook 帐户注册和登录,并且我需要能够访问一些基本信息,例如姓名、个人资料照片和电子邮件。

我想到的一个可能的场景是:

  1. 用户使用 Facebook 登录网络应用程序,该应用程序被授予允许访问用户 Facebook 信息并接收访问 token 。
  2. 网络应用要求 API 确认该用户实际上在我们的系统上注册,发送电子邮件和Facebook 收到的 token 。
  3. API 验证用户存在,它将用户名、 token 和一个时间戳,然后返回到客户端应用程序。
  4. 每次客户端应用程序命中 API 端点之一,它将必须提供用户名和 token ,除其他信息外。
  5. API 每次验证提供的用户名/ token 对是否最匹配存储在数据库中的最近对用户名/ token (使用时间戳订购),并且 self 们存储以来不超过 1 小时这些信息(再次使用时间戳)。如果是这样的话,API将处理请求,否则将发出 401 Unauthorized回复。

这有意义吗?这种方法是否有任何我遗漏的宏观安全漏洞?我发现使用 MongoDB 存储这些信息的一个问题是该集合将很快因旧 token 而变得臃肿。从这个意义上说,我认为最好使用具有 1 小时过期策略的 Redis,这样旧信息将被 Redis 自动删除。

最佳答案

我认为更好的解决方案是:

  1. 通过 Facebook 登录
  2. 将 Facebook AccessToken 传递到服务器(通过 SSLandroid 应用程序,对于网络应用程序,只需将其重定向到 API 端点FB登录后)
  3. 检查给定的fb_access_token,确保其有效。获取 user_idemail 并将其与现有用户交叉引用以看看是新的还是旧的。
  4. 现在,创建一个随机的、单独的 api_access_token,您将其返回给 web 应用程序和 android 应用程序。如果您需要 Facebook除了登录之外的任何其他内容,请将 fb_access_token 存储在您的DB 将其与新的 api_access_token 和您的 user_id 相关联。
  5. 对于此后的每个调用,发送 api_access_token 进行身份验证。如果您需要 fb_access_token 来获取更多信息,您可以通过从数据库中检索它来做到这一点。

总结:尽可能避免传递 fb_access_token。如果 api_access_token 遭到破坏,与他们获取 fb_access_token 相比,您可以更好地控制攻击者是谁、他们在做什么等。您还可以更好地控制设置到期日期、扩展 fb_access_token

只需确保无论何时通过 HTTP 传递任何类型的 access_token,都使用 SSL。

关于facebook - 使用 Facebook OAuth 保护 Rest API 端点的可能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15602667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com