我们正在创建一个用户可以登录的服务(后端+ iOS-app)。我们已经完成了我们自己的基于令牌的登录系统并注册了。我们现在正试图实现他们可以选择的功能,通过Facebook登录"或者" Twitter"等(I.E不使用我们的用户名和密码的自定义注册)
我们已成功实施客户端功能,但我们从第三方服务(Facebook)收到的只是一个令牌和用户的基本信息。
要使用我们的服务,(当然)需要在我们的服务器上注册一个正确的CustomUser对象(我们自己的),这通常会在我们的自定义注册中创建。通过第三方服务登录时,我们应该如何为该外部认证用户创建CustomUser对象?
当用户通过我们的应用程序通过第三方服务进行身份验证时,我们如何以及如何向我们自己的服务器发送注册(或进行身份验证)? 我们收到一个身份验证令牌(最终会过期),并且应用程序(客户端)可以访问用户在第三方的基本信息。我们正在考虑将基本信息(例如用户的user_id和电子邮件以及令牌)发送到我们自己的服务器,并为它创建一个新的用户对象(如果它之前不存在)。但是,我们意识到这根本不是很安全。当用户下次使用相同的第三方认证登录我们的服务时,我们只有用户user_id和电子邮件匹配。令牌可能是新令牌。这意味着任何拦截任何第三方登录呼叫到我们服务器的人都会看到,基于第三方认证登录现有customUser所需的唯一信息是user_id和电子邮件。哪些在大多数此类第三方服务上都非常公开,例如Facebook。
我们一直在尝试使用这些第三方服务来阅读OAuth和授权/身份验证,但我们所见过的每一份文档都非常注重第三方身份验证,而且并没有这样做。触摸我们自己的第三方身份验证身份验证主题
我们是不是错了?
答案 0 :(得分:0)
实际上,你对电子邮件和user_id所做的断言并不完全正确,至少对于Facebook而言。
...大多数此类第三方服务都是公开的,例如 主页。
当有人通过Facebook Oauth服务登录时,您将获得“app_scoped_user_id”,这是Facebook为用户和您的应用创建的唯一ID。每个用户对于他使用的每个应用程序都有不同的“应用范围用户ID”,除了您(应用程序)之外的任何人都不会知道“应用范围用户ID”。
所以我说使用“app scope用户ID”作为用户的标识符是安全的,也是最好的方法。
不确定它如何与Twitter等其他服务一起使用,但我很确定你可以做类似的事情。即使user_id是公共的,它也应该是唯一的,您可以使用它来识别您自己的用户。
我希望它有所帮助。