观察者 1
对象消息源
观察者 3
传递
通知中心
广播
观察者 2
证。网络开发是不变的趋势,不可避免的会有各种网络服务间分享内容的需要。使用 OAuth2.0 进行授权认证,OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。OAuth 的授权不会使第三方触及到用户的账号信息,即可申请获得该用户资源的授权。使用 OAuth,授权过程非常简单,而且用户
图2 iOS 通知原理图
Fig. 2 The noti cation schematics of iOS
的信息是安全的,服务开发者也不用存储和传输大量用户账号信息。并且业界提供了 OAuth 实现的各种语言开发包,节约开发时间。目前互联网很多服务如 Open API,很多大公司如 Google、Yahoo、Microsoft 等都提供了 OAuth 认证服务,这些都足以说明 OAuth 逐渐成为开放资源授权的标准。
OAuth 授权认证原理[7]流程如图 3 所示。第一步为用户进入登录界面,输入用户名和密码,请求登录,获取科研在线相关信息。客户端应用在开发前向科研在线服务平台注册,得到 key 和 secret,然后使用 key 和 secret 发送请求,申请未授权 token。第三步为服务器验证客户端应用身份后,创建未授权 token,发送给客户端。第四步,客户端根据未授权 token,获得登录科研在线平台的 URL,然后将用户输入的用户名和密码作为 URL 的参数,发送请求,进行登录。最后服务器验证用户的身份,将授权的 token 发送给客户端,客户端将凭借授权 token 每次依据用户需求,向服务器请求相应的资源并展现给用户。
Operation。MKNetworkEngine可以理解为管理请求队列的对象,MKNetworkOperation则是具体的网络请求。
首先需要创建一个 MKNetworkEngine 类对象engine:
MKNetworkEngine *engine = [[MKNetworkEngine alloc] initwithHostName: myHostName];
初始化engine,参数myHostName即为服务器url。然后根据不同请求的需求,将封装好的参数传递给engine,创建具体的网络请求,如下:MKNetworkOperation *op = [engine
operationWithPath:path params:params httpMethod: @”POST” ssl:NO];
参数 path 即为请求所对应服务器 API 的路径,params 则是 API 所需参数,请求的方式为 POST。
控制器与 engine 之间的数据交换通过 block,进行异步通信。当 http 请求结束时,block 通知控制器采取相应的方法处理该请求的返回结果。返回结果处理方法如下:
方法 1 –(void)finished:(MKNetworkOperation *)operation;
方法 2 –(void)Failed:(NSError *)error;
当接收数据成功时,调用方法 1,提取 operation 中的返回数据,并交由数据解析模块来解析数据。当接收数据失败,调用方法 2,提示用户请求失败。3.2 登录认证
登录认证使用开发授权协议 OAuth 进行授权认52
用户
输入用户名和密码
请求登录认证
①
客户端
②
服务器
创建未授权 token, 发送给客户端
请求未授权 token
③
发送用户名和密码信息,请求授权 token
④
生成授权 token
⑤
获得授权 token,访问服务器资源
图3 OAuth 授权认证流程
Fig. 3 The process of OAuth authorization and certi cation