国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

統(tǒng)一iOS客戶端和服務(wù)器端認(rèn)證

2019-11-14 20:01:54
字體:
供稿:網(wǎng)友

    最近公司的同事業(yè)余時間搞了一個內(nèi)部的類about.me(https://about.me/)的網(wǎng)站Ocelots,想來是一個很洋氣的注意,以后跟客戶介紹公司的時候,直接登錄該網(wǎng)站,談到誰的時候,就打開該人的主頁,照片,經(jīng)驗,愛好等等什么的都一清二楚了。我就開始想,如果是這樣的一個工具,沒有移動端多遺憾,因為我們在任何時候,任何場合都有需求要給客戶展示一下團(tuán)隊成員。 

       搭建好項目框架之后,遇到的第一個需求就是統(tǒng)一認(rèn)證, Ocelots使用了Google Oauth2和Mozilla Persona作為網(wǎng)站入口。其認(rèn)證方式結(jié)構(gòu)如下(僅以Google Oauth2為例,Mozilla Persona 原理相同): 
 

        Google Oauth2為同樣提供了對iOS系統(tǒng)的支持,因此,在Ocelots_iOS客戶端上實現(xiàn)一個和Ocelots一模一樣的認(rèn)證機制,是非常輕松的,但是,難點在于如何統(tǒng)一二者的認(rèn)證機制? 
        通過研究Google Oauth2的認(rèn)證機制,我發(fā)現(xiàn)其認(rèn)證機制如下: 
 

因此,我們可以通過如下的步驟統(tǒng)一Ocelots_iOS客戶端和Ocelots端的認(rèn)證機制, 
1、為Ocelots_iOS注冊應(yīng)用ID、確保Ocelots_iOS和Ocelots應(yīng)用的授權(quán)范圍一致。 
2、為Ocelots的用戶綁定一個authorize_token,通過該token可以獲取到該賬戶在系統(tǒng)中的所有信息。 
3、按如下的方式實現(xiàn)Ocelots_iOS客戶端的認(rèn)證機制: 
 
代碼如下: 
使用Google Oauth2插件調(diào)用Google認(rèn)證界面: 

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>正在進(jìn)入google登錄頁面...</div></body></html>";  
  8.     authViewController.initialHTMLString = html;  
  9.     [self.navigationController pushViewController:authViewController animated:YES];  
  10. }  



得到認(rèn)證結(jié)果之后,從服務(wù)器端獲取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. }  

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 彝良县| 深圳市| 凭祥市| 星子县| 莱西市| 陵川县| 大化| 龙海市| 虞城县| 营口市| 垦利县| 陆河县| 芦山县| 河南省| 盱眙县| 偏关县| 宁夏| 福海县| 五原县| 红桥区| 玉田县| 紫金县| 福贡县| 桦川县| 思南县| 富锦市| 桦南县| 繁峙县| 临沧市| 香港| 高安市| 朝阳市| 仪陇县| 宜丰县| 出国| 黄梅县| 韶山市| 稻城县| 棋牌| 临夏县| 谢通门县|