SSO的本质以及实现方法

来源:互联网 发布:无法连接到数据库 编辑:程序博客网 时间:2024/06/06 00:28

SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。

实现机制:

当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份校验,如果通过校验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行校验,检查ticket的合法性。如果通过校验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。
要实现SSO,需要以下主要的功能:
系统共享:
统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行校验,判断其有效性。

信息识别:

要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。

另外:
1、单一的用户信息数据库并不是必须的,有许多系统不能将所有的用户信息都集中存储,应该允许用户信息放置在不同的存储中,事实上,只要统一认证系统,统一ticket的产生和校验,无论用户信息存储在什么地方,都能实现单点登录。
2、统一的认证系统并不是说只有单个的认证服务器
当用户在访问应用系统1时,由第一个认证服务器进行认证后,得到由此服务器产生的ticket。当他访问应用系统2的时候,认证服务器2能够识别此ticket是由第一个服务器产生的,通过认证服务器之间标准的通讯协议(例如SAML)来交换认证信息,仍然能够完成SSO的功能。

举例:


新浪微博应用举例:

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

可能大部分用户都觉得在授权页面登陆新浪微博时输入登陆邮箱和密码特别不方便,经常需要数字字母等切换,还容易出错。不过SSO授权的出现让这些复杂的事情也随之烟消云散(前提是你的移动设备安装了新浪微博官方客户端)。那什么是SSO授权呢?简单的说就是接入新浪微博的第三方AndroidiOS应用可通过新浪微博官方客户端快速完成OAuth2.0授权。下面借用新浪官方图片来解释一下如何进行SSO授权。
新浪微博iOS平台SSO授权认证使用 - album163ios - 网易相册ios组
 
从上图中可以发现,用户只需要通过简单的点击就可以轻松完成授权,终于可以摆脱令人讨厌的键盘输入,大大增强了操作的简便性。到底是什么魔法让整个授权过程变的如此简单呢?下面就一一为你解开其中的奥秘。
你可以发现,SSO授权是通过新浪微博客户端完成的,第三方应用是如何访问新浪客户端的数据呢?iOS 的设计思路是原则上禁止不同的应用程序之间相互访问彼此的数据(sandbox模型),从安全的角度来说不失为一个有效的策略。不过凡事总有例外,所以乔老爷子还是为程序间通讯开放了接口——URL Scheme。

URL Scheme解释

这里面要在xcode中用到URL Schemes,添加到xcode的URL Types中,URL Schemes可以用来开启第三方应用用的,可以在第三方开放平台申请获得,例如可以把微信开放平台申请的的URL Schemes添加进URL Types,再写下面的方法就可以通过url在自己的应用中开启微信应用进行一些微信分享、微信支付等操作。



URL Scheme是类似http://ftp://afp://这样的东西,你可以在iOSMac中注册任何类型的URL Scheme。当用户在浏览器中访问你的自定义URL Scheme的链接的时候,操作系统就会打开你的程序,响应这个请求。这个特性通常用于在应用程序中启动另外一个应用程序来打开一种特定格式的数据。iOS 预定义了如下几种URL Scheme :
1sms:1-408-555-1212
2mailto:frank@wwdcdemo.example.com
3tel:1-408-555-5555
4mapyoutubeitunes
例如在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,使用相当简单。
0
0 0