【发布时间】:2013-03-25 04:01:09
【问题描述】:
我已经阅读了很多有关该主题的内容,但我发现的只是过时或部分答案,这对我没有太大帮助,实际上只是让我更加困惑。 我正在编写一个由 Web 应用程序(托管在与 API 相同的域上)和 Android 应用程序访问的 Rest API(Node+Express+MongoDB)。
我希望 API 只能由我的应用程序和授权用户访问。 我还希望用户能够仅使用他们的 Facebook 帐户注册和登录,并且我需要能够访问一些基本信息,例如姓名、个人资料图片和电子邮件。
我想到的一种可能的情况是:
- 用户使用 Facebook 登录 Web 应用程序,该应用程序被授予 访问用户 Facebook 信息的权限并收到 访问令牌。
- Web 应用程序要求 API 确认该用户 实际上是在我们的系统上注册,发送电子邮件和 Facebook 收到的令牌。
- API 验证用户 存在,它将用户名、令牌和 时间戳,然后返回到客户端应用。
- 每次 客户端应用程序命中 API 端点之一,它必须提供 用户名和令牌,而不是其他信息。
- API 每次 验证提供的用户名/令牌对最匹配 存储到数据库中的最近对用户名/令牌(使用时间戳 订购),并且自我们存储以来不超过 1 小时 这些信息(再次使用时间戳)。如果是这种情况,API 将处理请求,否则将发出 401 Unauthorized 回应。
这有意义吗? 这种方法是否存在我遗漏的任何宏观安全漏洞? 我看到使用 MongoDB 存储这些信息的一个问题是集合很快就会因旧令牌而变得臃肿。 从这个意义上说,我认为最好使用具有 1 小时过期策略的 Redis,以便 Redis 自动删除旧信息。
【问题讨论】: