我正在创建一个使用Facebook SSO登录的Android应用程序,我不确定在登录FB后如何使用自己的Web服务进行身份验证。当用户首次打开我的应用程序时,他们会登录到Facebook,授权我的应用程序一些权限,然后继续进入我的应用程序。这部分很有用,但现在要使用我的应用程序,他们需要在我的服务器上创建一个帐户并与我的webservices交谈。
现在我打电话给我的服务器上的身份验证web服务,将他们的Facebook ID和其他基本信息添加到数据库中,同时进行Diffie-Hellman密钥交换,以便将来对webservices的任何调用都可以加密共享密钥。但问题是,第一次初次调用创建此帐户并创建此共享密钥,我该如何进行身份验证呢?我怎么知道这个人真的是那个刚刚通过Facebook认证的人,而不仅仅是那些为我的网络服务找到URL并创建帐户并保存密钥的人?
答案 0 :(得分:9)
Facebook SSO返回访问令牌。如果你愿意,你可以将它传递给你的服务器,你的服务器可以调用Facebook API来检查它是否是该用户的有效访问令牌(例如通过调用https://graph.facebook.com/me?access_token=ACCESS_TOKEN) - 如果它是的,你很好,并且已经验证用户是他们所说的人(或者是一个有足够访问权限的黑客,为你的Facebook应用程序设置了有效的身份验证令牌,此时他们的身份已经在Facebook端受到损害)
答案 1 :(得分:1)
我认为您必须在创建个人资料时传递密码和基本信息。总而言之,Facebook SSO仅为您的客户端应用程序提供访问配置文件用户的权限,但它并不保证您的Web服务调用者是此FB帐户的实际所有者。我担心从Android客户端到Web服务的后续调用需要通过普通用户/名称密码(与FB帐户不同)进行身份验证,如果您想确保调用者是第一个检索密钥的人时间(无论他可能链接到哪个Facebook个人资料)。