统一iOS客户端和服务器端认证

最近公司的同事业余时间搞了一个内部的类about.me(https://about.me/)的网站Ocelots,想来是一个很洋气的注意,以后跟客户介绍公司的时候,直接登录该网站,谈到谁的时候,就打开该人的主页,照片,经验,爱好等等什么的都一清二楚了。我就开始想,如果是这样的一个工具,没有移动端多遗憾,因为我们在任何时候,任何场合都有需求要给客户展示一下团队成员。

搭建好项目框架之后,遇到的第一个需求就是统一认证, Ocelots使用了Google Oauth2和Mozilla Persona作为网站入口。其认证方式结构如下(仅以Google Oauth2为例,Mozilla Persona 原理相同): 

Google Oauth2为同样提供了对iOS系统的支持,因此,在Ocelots_iOS客户端上实现一个和Ocelots一模一样的认证机制,是非常轻松的,但是,难点在于如何统一二者的认证机制? 
        通过研究Google Oauth2的认证机制,我发现其认证机制如下: 

因此,我们可以通过如下的步骤统一Ocelots_iOS客户端和Ocelots端的认证机制, 
1、为Ocelots_iOS注册应用ID、确保Ocelots_iOS和Ocelots应用的授权范围一致。 
2、为Ocelots的用户绑定一个authorize_token,通过该token可以获取到该账户在系统中的所有信息。 
3、按如下的方式实现Ocelots_iOS客户端的认证机制: 
 
代码如下: 
使用Google Oauth2插件调用Google认证界面:

Object-c代码  

  1. -(void)authThroughGoogle
  2. {
  3. NSString *clientId = GOOGLE_CLIENT_ID;
  4. NSString *clientSecret = GOOGLE_CLIENT_SECRET;
  5. NSString *scope = GOOGLE_AUTH_SCOPE;
  6. GTMOAuth2ViewControllerTouch *authViewController = [[[GTMOAuth2ViewControllerTouch alloc] initWithScope:scope clientID:clientId clientSecret:clientSecret keychainItemName:kKeyChainGoogleAuth delegate:self finishedSelector:@selector(viewController:finishedWithAuth:error:)]autorelease];
  7. NSString *html = @"<html><body bgcolor=white><div align=center>正在进入google登录页面...</div></body></html>";
  8. authViewController.initialHTMLString = html;
  9. [self.navigationController pushViewController:authViewController animated:YES];
  10. }

得到认证结果之后,从服务器端获取Auth Token:

Object-c代码  

  1. -(void)viewController:(GTMOAuth2ViewControllerTouch *)viewController finishedWithAuth:(GTMOAuth2Authentication *)auth error:(NSError *)error{
  2. if (error!=nil) {
  3. NSLog(@"Auth failed!");
  4. [self showAlertView:[error localizedDescription]];
  5. }else{
  6. NSLog(@"Auth successed!: %@", [auth accessToken]);
  7. NSString  *token = [AuthHelper getAuthTokenThroughGoogle:[auth accessToken]];
  8. if(token != nil){
  9. [[NSUserDefaults standardUserDefaults] setObject:token forKey:APP_NAME];
  10. [self goToMainPage];
  11. }else{
  12. [self showAlertView:@"Get get the authorize token"];
  13. }
  14. }
  15. }
时间: 2024-08-07 03:47:35

统一iOS客户端和服务器端认证的相关文章

iOS客户端ssl签名认证加密双向加密建议使用双向加密更好维护--修改

一个app是否做到强大的加密方式,需要一个好的后台支撑,我有幸我们公司后台哥是珍爱网出来的大神,第一次知道用到除了以前md5 base64 等等单向加密还有ssl认证加密,一般来讲如果app用了web service , 我们需要防止数据嗅探来保证数据安全.通常的做法是用ssl来连接以防止数据抓包和嗅探,其实但心的黑客用伪造的ssl认证链接伪造的服务器上. 1.话不多说,首先你得要你后台给提供他的证书 2.拖到你的项目管理里面,这是你要做的,记住的项目是.cer结尾的证书. 3.我用到的是AFN

iOS socket Stream 服务器端 及 客户端 演示

iOS socket Stream 测试环境,mac osx 10.8 一:建立服务器端 由于mac osx10.8 已经集成 python2和 Twisted,我们可以直接利用此,构建一个简单的socket 服务器 如下测试一个简单的聊天 socket 并,定义,加入聊天时发送:iam:用户名 发送信息时:msg:信息 终端:vim server.py  回车,copy入如下代码 from twisted.internet.protocol import Factory, Protocol f

Android客户端与服务器端通过DES加密认证

转载地址:http://blog.csdn.net/spring21st/article/details/6730283 由于Android应用没有像web开发中的session机制,所以采用PHPSESSID的方式,是没有办法获取客户端登录状态的. 这种情况下,如何在用户登录后,服务器端获取用户登录状态并保持,就必须采用一种“握手”的方式. 每个手机都有自己的IMEI号,那么能不能通过这个标识去做认证呢? 经过试验,答案是可以! 客户端在请求服务器端的时候,请求参数为 IMEI (param

开源中国iOS客户端学习

开源中国iOS客户端学习 续写前言 <开源中国iOS客户端学习>续写前系列博客    http://blog.csdn.net/column/details/xfzl-kykhd.html 开源中国iOS客户端学习——序 说到这款开源软件就得提到她的娘家了--开源中国社区: 开源中国社区简介:开源中国 www.oschina.net 成立于2008年8月,是目前中国最大的开源技术社区.传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现.使用.并交流开源技术的平台.目前开源中国社区已收

基于Doubango的iOS客户端开源框架

一.ios-ngn-statck工程 1.Tests ---功能测试 2.底层模块(c和c++) Doubango --- 基于3GPP IMS/RCS 并能用于嵌入式和桌面系统的开源框架 1) tinyWRAP --- c++代码,对c代码以面向面向对象的方式进行封装,提供给上层调用. 2) tinyDAV --- Doubango媒体音频/视频控制,tinyMedia核心框架 a) audio --- 音频 b) codecs --- 编解码器 c) msrp --- 文件传输 d)vide

Socket在iOS客户端上的简单实现 - 利用GCAsyncSocket框架

GCAsyncSocket 这是一个2003的开发出来的一个开源框架 首先把GCDAsyncSocket的.h和.m文件拖入到工程中 试图控制器遵守GCDAsyncSocketDelegate协议 实例:在页面上有一个简单的textView和textField 在textField中输入文字后,点击发送即可把文字发送到服务器 ,服务器端返回的文字数据会显示到textView上 //  服务器主机ip地址#define kHost @"172.16.3.101"//  服务器主机通信端口

分布式数据库中间件–(2) Cobar与客户端的握手认证

Cobar启动完成,监听特定端口.整个认证的流程图: NIOAcceptor类继承自Thread类,该类的对象会以线程的方式运行,进行连接的监听. NIOAcceptor启动的初始化过程如下: 1 .打开一个selector,获取一个ServerSocketChannel对象,对该对象的socket绑定特定的监听端口,并设置该channel为非阻塞模式,然后想selector注册该channel,绑定感兴趣的事件位OP_ACCEPT. 01 public NIOAcceptor(String n

更新日志 - BugHD iOS 客户端上线

中秋.十一长假归来,"满血复活"的我们做了 fir.im 和 BugHD 的优化更新:) BugHD 新增功能 1.iOS 客户端上线 BugHD iOS 客户端上线了,你可以随时随地查看应用崩溃状况.如果需要精确看到崩溃错误堆栈的代码行,可以在 BugHD 网站上传符号表版本.如何上传 iOS 符号表,请点击这里 iOS 版 AppStore地址 Android 版 下载地址 2.BugHD 网站移动端适配 我们对 BugHD 网站进行了移动端适配,如果你发现任何 Bug,欢迎将详尽

【HELLO MAKA】MAKA iOS客户端 之二 架构设计与实现篇

上一篇主要做了MAKA APP的需求分析,功能结构分解,架构分析,API分析,API数据结构分析. 这篇主要讲如何从零做iOS应用架构. [HELLO MAKA]MAKA iOS客户端 之一 APP分析篇 [HELLO MAKA]MAKA iOS客户端 之二 架构设计与实现篇 [HELLO MAKA]MAKA iOS客户端 之三 创作模块分析与实现篇 1.  iOS客户端架构 按照功能模块划分.这里可以使用二层设计也可以使用三层设计.MVC, MVCS, MVVM, MVP, VIPER, DD