SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。
实现机制:
信息识别:
要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。
举例:
新浪微博应用举例:
新浪微博的开放平台采用Oauth认证技术来实现第三方应用对微博数据的访问。Oauth认证的好处是 应用方并不需要保存用户的帐户与密码,只需要保存经过用户授权的 Key与Secret组合即可对于平台上的所有接口资源进行访问,在传输过程中也可以避免被不怀好意的人通过截包分析的方式获取到用户的帐号与密码。APP在授权时会通过WebView 加载新浪微博的授权页面,用户进入这个页面登录新浪微博,进行Token的授权。之后App就可以利用token获取用户相关数据,包括timeline,user info,post status等。注:以下所有的文字都是基于ios平台这个前提。URL Scheme解释:
这里面要在xcode中用到URL Schemes,添加到xcode的URL Types中,URL Schemes可以用来开启第三方应用用的,可以在第三方开放平台申请获得,例如可以把微信开放平台申请的的URL Schemes添加进URL Types,再写下面的方法就可以通过url在自己的应用中开启微信应用进行一些微信分享、微信支付等操作。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:1-408-555-1212"]];
需要注意的是:在多个应用程序注册了同一种URL Scheme 的时候,iOS 系统程序的优先级高于第三方开发程序。但是如果一种URL Scheme 的注册应用程序都是第三方开发的,那么这些程序的优先级关系是不确定的。所以在注册scheme时尽量选择特殊的名字,以免和别的应用冲突。
发送 URL Scheme
接收 URL Scheme
NSURL *myURL = [NSURL URLWithString:@"URL Scheme"];
[[UIApplication sharedApplication ] openURL:myURL];
URL Schemes 由系统发送给 application delegate , delegate中的如下代理函数负责接收url scheme:
- - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
- - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
有了上面这些基础知识再来理解新浪微博SSO授权就简单明了了,大致实现过程可以猜测为:第一步,第三方应用通过新浪微博事先公开的自定义URL Scheme来调用新浪微博app,将第三方应用的appkey,回调url scheme等相关参数传过去;第二步,新浪微博app将自身管理的已登陆的账号信息展示给用户;第三步,用户选择指定账户后由新浪微博app负责和新浪后端服务器进行验证授权;第四步,新浪微博app通过之前传过去的回调url scheme来调用第三方应用,将获得的授权token传给第三方应用;第五步,第三方应用获得授权token,使用token进行各项已授权的操作。