统一iOS客户端和服务器端认证_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > 统一iOS客户端和服务器端认证

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

 2014/9/24 10:13:16  wx0123  程序员俱乐部  我要评论(0)
  • 摘要:最近公司的同事业余时间搞了一个内部的类about.me(https://about.me/)的网站Ocelots,想来是一个很洋气的注意,以后跟客户介绍公司的时候,直接登录该网站,谈到谁的时候,就打开该人的主页,照片,经验,爱好等等什么的都一清二楚了。我就开始想,如果是这样的一个工具,没有移动端多遗憾,因为我们在任何时候,任何场合都有需求要给客户展示一下团队成员。搭建好项目框架之后,遇到的第一个需求就是统一认证
  • 标签:iOS 客户 服务器 客户端 服务

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

       搭建好项目框架之后,遇到的第一个需求就是统一认证, 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代码 javascripts/syntaxhighlighter/clipboard_new.swf" type="application/x-shockwave-flash">ways" /> 收藏代码
  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代码 failed!%22)%3B%0A%20%20%20%20%20%20%20%20%5Bself%20showAlertView%3A%5Berror%20localizedDescription%5D%5D%3B%0A%20%20%20%20%7Delse%7B%0A%20%20%20%20%20%20%20%20NSLog(%40%22Auth%20successed!%3A%20%25%40%22%2C%20%5Bauth%20accessToken%5D)%3B%0A%20%20%20%20%20%20%20%20NSString%20%20*token%20%3D%20%5BAuthHelper%20getAuthTokenThroughGoogle%3A%5Bauth%20accessToken%5D%5D%3B%0A%20%20%20%20%20%20%20%20if(token%20!%3D%20nil)%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%5BNSUserDefaults%20standardUserDefaults%5D%20setObject%3Atoken%20forKey%3AAPP_NAME%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%5Bself%20goToMainPage%5D%3B%0A%20%20%20%20%20%20%20%20%7Delse%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%5Bself%20showAlertView%3A%40%22Get%20get%20the%20authorize%20token%22%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D" /> 收藏代码
  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. }  
上一篇: C#操作XML小结(转) 下一篇: 没有下一篇了!
发表评论
用户名: 匿名