您的位置:首页 > 移动开发 > IOS开发

新浪微博iOS平台SSO授权认证原理分析

2014-10-21 16:22 190 查看
原文链接:http://iosdevelop.blog.163.com/blog/static/21807716920132212473678/

众所周知,新浪微博的开放平台采用Oauth认证技术来实现第三方应用对微博数据的访问。Oauth认证的好处是应用方并不需要保存用户的帐户与密码,只需要保存经过用户授权的Key与Secret组合即可对于平台上的所有接口资源进行访问,在传输过程中也可以避免被不怀好意的人通过截包分析的方式获取到用户的帐号与密码。APP在授权时会通过WebView 加载新浪微博的授权页面,用户进入这个页面登录新浪微博,进行Token的授权。之后App就可以利用token获取用户相关数据,包括timeline,user
info,post status等。注:以下所有的文字都是基于ios平台这个前提。

可能大部分用户都觉得在授权页面登陆新浪微博时输入登陆邮箱和密码特别不方便,经常需要数字字母等切换,还容易出错。不过SSO授权的出现让这些复杂的事情也随之烟消云散(前提是你的移动设备安装了新浪微博官方客户端)。那什么是SSO授权呢?简单的说就是接入新浪微博的第三方Android、iOS应用可通过新浪微博官方客户端快速完成OAuth2.0授权。下面借用新浪官方图片来解释一下如何进行SSO授权。



从上图中可以发现,用户只需要通过简单的点击就可以轻松完成授权,终于可以摆脱令人讨厌的键盘输入,大大增强了操作的简便性。到底是什么魔法让整个授权过程变的如此简单呢?下面就一一为你解开其中的奥秘。

你可以发现,SSO授权是通过新浪微博客户端完成的,第三方应用是如何访问新浪客户端的数据呢?iOS 的设计思路是原则上禁止不同的应用程序之间相互访问彼此的数据(sandbox模型),从安全的角度来说不失为一个有效的策略。不过凡事总有例外,所以乔老爷子还是为程序间通讯开放了接口——URL
Scheme。

URL Scheme
URL Scheme是类似http://,ftp://,afp://这样的东西,你可以在iOS和Mac中注册任何类型的URL
Scheme。当用户在浏览器中访问你的自定义URL Scheme的链接的时候,操作系统就会打开你的程序,响应这个请求。这个特性通常用于在应用程序中启动另外一个应用程序来打开一种特定格式的数据。iOS 预定义了如下几种URL
Scheme :
1、sms:1-408-555-1212
2、mailto:frank@wwdcdemo.example.com
3、tel:1-408-555-5555
4、map、youtube,itunes等
例如在App中通过下面代码就能调用系统短信程序,直接于该号码进行发送短信
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:1-408-555-1212"]];

注册url scheme

你也可以自定义URL
Scheme, 点击工程target,进入info选项,找到URL Types栏目,点击“+”按钮添加url type。如下图所示:



需要注意的是:在多个应用程序注册了同一种URL Scheme 的时候,iOS 系统程序的优先级高于第三方开发程序。但是如果一种URL Scheme 的注册应用程序都是第三方开发的,那么这些程序的优先级关系是不确定的。所以在注册scheme时尽量选择特殊的名字,以免和别的应用冲突。

发送 URL
Scheme

NSURL *myURL = [NSURL URLWithString:@"URL Scheme"];
[[UIApplication sharedApplication ] openURL:myURL];

接收 URL
Scheme


URL Schemes 由系统发送给 application delegate , delegate中的如下代理函数负责接收url scheme:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
在 4.1 及之前版本的 iOS 中实现。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
在 4.2 及之后版本的 iOS 中实现。


有了上面这些基础知识再来理解新浪微博SSO授权就简单明了了,大致实现过程可以猜测为:第一步,第三方应用通过新浪微博事先公开的自定义URL Scheme来调用新浪微博app,将第三方应用的appkey,回调url scheme等相关参数传过去;第二步,新浪微博app将自身管理的已登陆的账号信息展示给用户;第三步,用户选择指定账户后由新浪微博app负责和新浪后端服务器进行验证授权;第四步,新浪微博app通过之前传过去的回调url
scheme来调用第三方应用,将获得的授权token传给第三方应用;第五步,第三方应用获得授权token,使用token进行各项已授权的操作。

具体如何使用使用官方提供的sdk包,可以去官方主页下载sdk。压缩包内有使用文档和demo,使用相当简单。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: