- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在尝试实现 Passport 模块并决定我对不知道幕后发生的事情感到很不舒服之后,我想出了自己的方法来使用 Facebook 对移动用户进行身份验证。以下是我的方法,但我担心我可能会遗漏一些重要的东西,因为我是新手。任何见解将不胜感激。
重要提示:每个用户都需要使用 Facebook 登录。
移动客户端使用 Facebook API 对用户进行身份验证并接收 access_token。
对我的 node.js 服务器发出的每个具有用户特定/特权操作的后续请求都将包含该用户的唯一 ID 和当前的 Facebook access_token。
该请求将通过一个 sails.js 策略(中间件)进行传递,该策略将来自请求的 Facebook access_token 与当前保存到该用户的数据库中的用户对象的 access_token 进行比较。
如果它们匹配,请求将继续执行所需的操作。如果它们不匹配,服务器将使用请求中提供的访问 token 调用graph.facebook.com/me/?access_token=
。
如果从 Facebook 服务器返回的唯一 Facebook ID 与初始注册时已保存到该用户的用户对象的 Facebook ID 匹配,则新的 access_token 将保存/刷新到该用户对象,并且请求继续到所需的行动。
同样重要的是:移动客户端将自动刷新 Facebook access_token 并根据需要将其包含在对我的服务器的请求中。
提前致谢!
最佳答案
这不是一个好主意。我将在这里详细解释原因,但总的来说:使用护照或安全身份验证提供程序,如 Stormpath .原因是:安全很难做到正确。尤其是当您从不同的地方(网络应用程序、API、移动应用程序等)进行身份验证时。有很多方法可以把事情搞砸,从长远来看,如果不使用经过严格审查的框架,可能会让您付出很多代价。
现在,这里是您的实现问题的分割:
Mobile client authenticates user with Facebook API and receives an access_token.
这很好,这是有道理的。
Every subsequent request to my node.js server with user-specific/privileged actions will contain that user's unique ID and current Facebook access_token.
唯一ID是在哪里生成的?是 Facebook 用户 ID 吗?如果是这样,请不要将此传递到 token 外部——将其保留在内部并且仅通过 HTTP 授权 header 传递 token 。这将确保您泄漏尽可能少的信息。
The request will pass through a sails.js policy (middleware) that compares the Facebook access_token from the request to the access_token currently saved to that user's User object from database.
这是个坏主意。相反,您应该使用 JWT 库验证 token (Facebook token 是 JWT)。然后,您应该使用 token 向 Facebook Graph API 发出请求,以验证它没有被撤销。这可确保如果您的用户受到威胁,您实际上可以在需要时撤销访问权限。
If they match, the request will continue to the desired action. If they don't match, the server will make a call tograph.facebook.com/me/?access_token= with the access token provided from the request.
上述评论也适用于此。
If the unique Facebook ID returned from Facebook's server matches the Facebook ID that was already saved to that user's User object upon initial registration then the new access_token is saved/refreshed to that User object and the request continues to the desired action.
上述评论也适用于此。
注意:我是几个使用 Node.js 和 Python 的流行身份验证库(包括社交登录)的作者,并且我的所有时间都花在我公司的这些东西上。
身份验证真的很有趣/有趣,但是除非您绝对 100% 确定自己做的一切都是正确的,否则最好使用经过严格审查的框架 =)
我真的希望这对您有所帮助!祝你的项目好运!我相信它会很棒。
PS:无论如何,在与您的 API 服务通信时一定要使用 SSL,否则这些都不重要 :(
关于node.js - 我为 node.js 应用程序设计的身份验证方法是否可行?我错过了什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33420217/
我无法在附加行中显示“真”、“假”、"is"和“否”按钮。 我在这里有一个应用程序:Application 请按照以下步骤使用应用程序: 1。当你打开应用程序时,你会看到一个绿色的加号按钮,点击 在此
我是一名优秀的程序员,十分优秀!