我一直在阅读很多关于这个主题的内容,但我发现的所有内容都是过时的或部分的答案,这些并没有真正帮助我,实际上只是让我更加困惑。 我正在编写一个Rest API(Node + Express + MongoDB),它可以通过Web应用程序(托管在与API相同的域上)和Android应用程序访问。
我希望API只能由我的应用程序访问,并且只能由授权用户访问。 我还希望用户只能使用他们的Facebook帐户进行注册和登录,我需要能够访问一些基本信息,如姓名,个人资料照片和电子邮件。
我想到的一个可能的情况是:
这有意义吗? 这种方法是否有任何我遗漏的宏观安全漏洞? 我使用MongoDB来存储这些信息的一个问题是,使用旧令牌,集合很快就会变得臃肿。 从这个意义上讲,我认为最好使用Redis的过期策略为1小时,以便Redis自动删除旧信息。
答案 0 :(得分:33)
我认为更好的解决方案是:
fb_access_token
,确保其有效。获取user_id
,email
并与现有用户交叉引用
看它是新的还是旧的。api_access_token
,您将回馈给webapp和Android应用程序。如果你需要Facebook
登录以外的任何内容,存储fb_access_token
和您的。{1}}
数据库将其与新的api_access_token
和您的user_id
。api_access_token
进行身份验证。如果您需要fb_access_token
来获取更多信息,则可以
通过从DB中检索来实现。 总结:只要有可能,请避免传递fb_access_token
。如果api_access_token
被泄露,您可以更好地控制攻击者是谁,他们正在做什么等等,而不是他们要获得fb_access_token
。您还可以更好地控制设置的到期日期,扩展fb_access_token
等等
只要确保无论何时通过HTTP传递任何类型的access_token,都要使用SSL。