身份验证、android、私有API,如何将这些部分粘合在一起?

身份验证、android、私有API,如何将这些部分粘合在一起?,android,facebook,authentication,api-key,Android,Facebook,Authentication,Api Key,比如说,我为Android开发了这个应用程序,它需要使用基于Facebook(或Twitter或Google或所有这些)的身份验证,这样它就可以访问我用nodejs的Express开发的这个私有API(也可以是任何其他平台)。我读过这个答案,它给了我一个如何将我的身份验证模型与我的用户模型相关联的提示(另一个让我意识到这两个部分是不同的),Facebook进行身份验证,我使用他们提供的一些信息为这个用户创建一个“身份”,但是,究竟是什么信息会在用户和身份之间创建链接?请不要抽象术语,我需要使用并

比如说,我为Android开发了这个应用程序,它需要使用基于Facebook(或Twitter或Google或所有这些)的身份验证,这样它就可以访问我用nodejs的Express开发的这个私有API(也可以是任何其他平台)。我读过这个答案,它给了我一个如何将我的身份验证模型与我的用户模型相关联的提示(另一个让我意识到这两个部分是不同的),Facebook进行身份验证,我使用他们提供的一些信息为这个用户创建一个“身份”,但是,究竟是什么信息会在用户和身份之间创建链接?请不要抽象术语,我需要使用并发送访问令牌或Facebook用户id吗?或者我只是发送访问令牌,让服务器获取用户id

关于该用户经过身份验证后的新请求,我已经阅读了一些API密钥,它们基本上是一些随机字符串,我应该添加到我的身份(或用户?这部分让我困惑)实体中,它们应该安全地存储在移动设备中,作为对进一步请求进行身份验证的机制,但首先,我如何安全地将这个随机字符串发送到设备?我是否误解了API键的工作方式?Facebook身份验证和API密钥是互斥的吗?如果是这样的话,对于进一步的请求,仅使用提供者进行身份验证,我会使用什么?在每个请求中传递访问代码似乎不合逻辑,传递用户id更是不合逻辑


对于我来说,这个问题的重点是建立一个管理这种身份验证用户身份行为的可靠策略模型,希望了解以前是如何做到的,因为我在SO和web中发现的资料非常缺乏,通常只涉及服务器端实现或只是身份验证答案,未解决进一步请求的问题。

Facebook/用户ID用于识别(返回的)用户。请记住,你只会得到一个“应用程序范围的ID”,而不是“真正的”ID-它在应用程序中是唯一的,但在另一个应用程序中是不同的。参见变更日志:

访问令牌用于调用Graph API。有3种不同的令牌(应用令牌、用户令牌、页面令牌),您可以在这些文章中阅读更多关于它们的内容:

您可以为以后存储访问令牌,但在大多数情况下,您不需要存储它们-仅当您需要在用户不使用您的应用程序时访问API时

通常,应用令牌可用于请求公共内容和更改应用设置。用户令牌可用于请求(或发布)用户内容,页面令牌可用于请求查看Facebook页面和其他内容


如果您想自己处理访问令牌,请确保在设置中激活appsecret\u-proof。我建议阅读这篇关于保护API调用安全的文章:

那么将用户ID从移动设备发送到API以进行用户关联应该是安全的?关于我关于API密钥的问题,你有什么见解吗?如果你是指密钥散列,也许这个线程可以帮助你:是的,发送用户id是绝对安全的。你只需要小心使用访问令牌(尽管它们是由SDK处理的)-并且只在服务器上使用应用程序机密,它被称为机密是因为:)我添加了更多信息,我忘记了非常重要的appsecret证明可能性:)不,我不是指facebook密钥哈希,我指的是我的应用程序在认证后应该在每个请求中传递什么?在web应用程序世界中,cookies和会话用于此,这是我缺少的另一种胶水,我将使用facebook用户id创建并将我自己的用户链接到该身份验证成功尝试,但它应该返回“某物”,我将用于进一步请求的身份验证,这某物,这胶水,这就是我所缺少的。