我正在开发一个iOS应用程序,使用Facebook身份验证让用户登录应用程序,然后该应用程序与Python REST Web服务进行交互。
用户使用Facebook凭据登录应用后,我应该使用哪种策略来验证网络服务电话?
答案 0 :(得分:6)
将身份验证令牌发送到您的REST Web服务,并让REST Web服务使用fb(facebook)进行检查。
用户登录应用后,您将获得身份验证令牌。
将令牌和fb用户ID发送给您的REST Web服务。
您的网络服务应验证令牌是否有效(这涉及对fb的服务器 - 服务器API调用)。
我使用了php和这段代码,但python应该看起来一样。
function checkFacebookLogin($acces_token) {
$url = "https://graph.facebook.com/me?access_token=" . strip_tags($acces_token);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$response = curl_exec($ch);
curl_close($ch);
$user = json_decode($response);
return $user;
}
如果它有效,则会返回用户。
验证用户ID(来自fb和步骤2中的帖子)。如果它是相同的,那么您就拥有了经过身份验证的用户。
将身份验证令牌和时间戳存储在您服务器上的本地数据库中,这样您就不必再通过ander打电话给facebook了。当用户重新登录时,您可以检查身份验证令牌和时间(仅有效x小时)并授予权限,而无需使用Facebook检查令牌。请注意,用户可以在此期间撤销fb权限。
当然,请查看Google的开发者文档中的validating the token。它是为(javascript like)客户端应用程序编写的,但这并不重要。你可以用php或python调用url。
最后你会打电话给:
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=##ADD_TOKEN_HERE##
您还可以阅读Google提供的关于从已安装的应用中使用Google登录并使用Google从网络服务器进行控制的2个文档。
https://developers.google.com/accounts/docs/OAuth2InstalledApp https://developers.google.com/accounts/docs/OAuth2WebServer
答案 1 :(得分:3)
我将采取的工作流程:
基本上它是一种非常类似于facebook API的方法。您将始终在网址末尾添加一个accessstoken padding(查询字符串)。 关于这一点的好处是,您不再需要担心访问令牌到期。
答案 2 :(得分:1)
以下是有关如何使用Facebook SDK
平台上的iOS
对用户进行身份验证的官方Facebook文档:https://developers.facebook.com/docs/tutorials/ios-sdk-tutorial/authenticate/
以下是GitHub上Facebook官方xcode
示例的链接,该示例允许您使用FBSession
对象https://github.com/facebook/facebook-ios-sdk/tree/master/samples/SessionLoginSample对用户进行身份验证。此代码适用于iPhone OS 4.0 or later
。
要开始使用此代码示例,您需要通过following six steps开始使用Facebook SDK
:
git clone git@github.com:facebook/facebook-ios-sdk.git FacebookSDK
SessionLoginSample
示例
app ID
通过拖动来添加适用于iOS Framework的Facebook SDK {SDK}安装文件夹中的
FacebookSDK.framework
文件夹Frameworks
的{{1}}部分。通过拖动来添加适用于iOS资源包的Facebook SDK 来自
Project Navigator
的文件FacebookSDKResources.bundle
部分的FacebookSDK.framework/Resources
部分 你的Frameworks
。接下来,您需要将
Project Navigator
SQL库添加到列表中 在“构建设置”窗格中构建依赖项
''-lsqlite3.0''
:您需要将Facebook应用ID放在您的两个位置 应用程序的主
app ID
文件。创建一个名为.plist
的密钥 使用字符串值,并在那里添加应用程序ID。此外,使用单个数组创建一个名为URL类型的数组键 子项称为URL Schemes。将此
的项目FacebookAppID
前缀为fb。
six detailed steps你会在这里找到:https://developers.facebook.com/docs/getting-started/facebook-sdk-for-ios/3.1/
用户通过身份验证后,即app
ID
开启activeSession
后,您需要使用Facebook SDK FBSession
对象将用户的信息作为{{1}获取您可以发送到Python REST Web服务的对象。这方面的官方教程如下:https://developers.facebook.com/docs/tutorials/ios-sdk-tutorial/personalize/,相关代码示例FBRequest
位于此处:https://github.com/facebook/facebook-ios-sdk/tree/master/samples/ProfilePictureSample
FBGraphUser
对象只能返回limited set of data,即:
Open Graph对象数据的完整列表位于:https://developers.facebook.com/docs/technical-guides/opengraph/built-in-objects/#external_profile
如有任何问题,请随时留下一些意见。
答案 3 :(得分:0)
您仍然需要为REST服务提供单独的身份验证解决方案,只要您允许人们对您自己的数据执行CUD(创建,更新,删除),而不仅仅是R(读取)。
说到这一点,为了符合标准或更多趋势,oAuth 1.0(Twitter)或2.0(Facebook)是最好的选择。 oAuth 1.0有点复杂,但oAuth 2.0需要SSL。亚马逊AWS有自己的解决身份验证问题的方法,你可以稍微研究一下,看看这是不是你想要的。但一般而言,如果您的REST服务旨在供第三方开发人员使用,那么最好采用该标准。
答案 4 :(得分:0)
答案 5 :(得分:0)
您需要使用Facebook oAuth工具api。
首先,您需要注册Facebook才能使用oauth。 Facebook将为您提供令牌(基本的唯一字符串ID)。
使用这些令牌,您将调用Facebook的登录服务。
成功尝试后,您将获得一些用户数据和回调,以将控件重定向到您的应用程序。
例如,您可以参考基于oauth的Twitter服务示例。 http://shakthydoss.com/open-authentication-oauth-with-twitter/