`

统一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认证界面:
-(void)authThroughGoogle
{
    NSString *clientId = GOOGLE_CLIENT_ID;
    NSString *clientSecret = GOOGLE_CLIENT_SECRET;
    NSString *scope = GOOGLE_AUTH_SCOPE;
    GTMOAuth2ViewControllerTouch *authViewController = [[[GTMOAuth2ViewControllerTouch alloc] initWithScope:scope clientID:clientId clientSecret:clientSecret keychainItemName:kKeyChainGoogleAuth delegate:self finishedSelector:@selector(viewController:finishedWithAuth:error:)]autorelease];
    NSString *html = @"<html><body bgcolor=white><div align=center>正在进入google登录页面...</div></body></html>";
    authViewController.initialHTMLString = html;
    [self.navigationController pushViewController:authViewController animated:YES];
}


得到认证结果之后,从服务器端获取Auth Token:
-(void)viewController:(GTMOAuth2ViewControllerTouch *)viewController finishedWithAuth:(GTMOAuth2Authentication *)auth error:(NSError *)error{
    if (error!=nil) {
        NSLog(@"Auth failed!");
        [self showAlertView:[error localizedDescription]];
    }else{
        NSLog(@"Auth successed!: %@", [auth accessToken]);
        NSString  *token = [AuthHelper getAuthTokenThroughGoogle:[auth accessToken]];
        if(token != nil){
            [[NSUserDefaults standardUserDefaults] setObject:token forKey:APP_NAME];
            [self goToMainPage];
        }else{
            [self showAlertView:@"Get get the authorize token"];
        }
    }
}

  • 大小: 82.5 KB
  • 大小: 75.1 KB
  • 大小: 96.4 KB
分享到:
评论

相关推荐

    iOS 微信支付demo

    为了保证交易的安全性,务必在服务器端进行金额计算和验证,避免敏感信息在客户端暴露。同时,遵循微信支付的安全规范,定期更新SDK以防范安全漏洞。 以上是iOS应用集成微信支付的基本流程和关键知识点。"iOS微信...

    Delphi XE2 DataSnap Development Essentials

    DataSnap是Embarcadero Technologies公司为Delphi和C++Builder开发者提供的一种强大的分布式应用程序框架,它允许开发者创建高度可扩展、安全且高效的服务器端应用程序,同时简化客户端与服务器之间的数据交互。...

    基于xmpp协议的多端即时通讯方案

    - **iOS客户端**:开发iOS客户端需要熟悉Swift或Objective-C语言,可以使用Xcode集成开发环境。 - **跨平台客户端**:也可以选择使用React Native或Flutter等框架开发跨平台客户端。 ##### 2、Pc客户端 - **...

    getting started with meteor

    它是一个全栈的JavaScript框架,意味着开发者可以用JavaScript来编写客户端和服务器端的代码。Meteor将Web应用开发简化为单一语言模型,它通过一种简单的方式来构建、测试和部署应用程序。 知识点一:Meteor的全栈...

    宁盾802.1x场景化认证方案.docx

    - **iOS平台**: iOS设备上的802.1x认证配置相对简单,但同样需要正确设置EAP类型和证书信息。苹果提供了良好的用户体验和支持,使得配置过程较为流畅。 **PC端Windows10 802.1X认证** - Windows 10支持无需额外...

    vnc viewer

    一旦连接建立,客户端可以实时看到服务器端的屏幕,并发送键盘和鼠标输入,实现远程操作。 VNC Viewer 的主要特点和功能包括: 1. **跨平台支持**:VNC Viewer 支持 Windows、Mac OS X、Linux、iOS 和 Android 等...

    app分发系统源码

    分发源码,顾名思义,是这个系统的原始代码,通常包括了服务器端、客户端以及可能的后台管理系统等组件。通过获取并研究这些源码,开发者可以了解到整个系统的架构、功能实现、数据处理方式以及交互逻辑等核心内容。...

    AES+RSA加解密demo源码(js和java互通).zip

    在Android、iOS和微信小程序这样的多平台应用中,统一的服务端接口需要处理来自不同客户端的请求。通过在客户端对数据进行预处理(如加密),可以提高安全性,防止中间人攻击。服务端再进行解密,确保只有合法的...

    Uniapp+SpringBoot即时通讯聊天安卓APP源码.zip

    WebSocket是一种在客户端和服务器之间建立长连接的协议,它使得双向通信成为可能,从而实现即时通讯的核心功能。在这个项目中,SpringBoot应当已经配置了WebSocket服务,用于处理客户端的连接、断开、消息发送和接收...

    PHP三端 小鹿直播 全套完整源码 包含网站+安卓+苹果

    1. **PHP后端开发**:PHP是一种广泛使用的服务器端脚本语言,尤其适合Web开发。在这个项目中,PHP用于处理用户请求,进行数据交互,如用户登录、注册、直播流传输、聊天消息发送等。 2. **数据库设计**:源码中必然...

    基于PHP的最新四端同步影视源码苹果cms影视四端APIcloud混合原生APP源码.zip

    在本项目中,PHP用于处理服务器端逻辑,如用户认证、数据检索、播放列表生成、视频流处理等。 2. 四端同步:四端同步指的是将同一套源码适配于Web、iOS、Android以及混合原生APP四个平台,实现功能和界面的一致性。...

    远程软件PeerYou

    在文件列表中,我们可以看到两个主要的文件——`PeerYouS`和`PeerYouC`,它们很可能是PeerYou软件的客户端和服务器端组件。`PeerYouS`可能代表“Server”或“Service”,是远程服务的后台部分,处理用户的请求,维持...

    VMWare Horizon 7 技术功能实践.pdf

    - **Flash重定向**:将Flash内容从客户端重定向到服务器端,改善性能和安全性。 - **URL内容重定向**:控制用户访问特定类型的网页内容。 - **Windows 2016技术预览**:为Windows Server 2016提供支持,包括高DPI...

    多语言IM即时通讯源码-支持7端互通通讯/带教程源码下载

    1. **服务器端**:负责处理客户端的连接、消息传输、用户认证等,通常采用分布式架构以保证高可用性和可扩展性。 2. **客户端SDK**:提供给开发者集成到各自应用中的API,实现与服务器的交互,处理用户界面和用户...

    手机淘宝 H5 和 Weex 容器的构建实践.pdf

    预加载技术可以分为客户端预加载和服务器端预加载,客户端预加载主要是指在应用启动或进入某个页面之前,提前加载部分资源,以此减少用户等待时间。服务器端预加载则是指在服务器响应客户端请求之前,提前准备好资源...

    网络游戏-借助OPCUA协议以无线网络能量优化地传输数据的方法和装置.zip

    这包括服务器端和客户端的OPCUA服务实现,以及相应的能量优化策略。 7. 整体方案:结合上述要素,"网络游戏-借助OPCUA协议以无线网络能量优化地传输数据的方法和装置"可能详述了一个完整的解决方案,包括系统架构...

    微信支付文档

    服务器端的处理对于不同的手机操作系统是一致的,但客户端开发则需针对不同系统(如IOS、Android等)开发不同的版本。开发者在接入微信支付时需要注意使用HTTPS进行通信认证,以及在处理退款和冲正时的特殊要求。 ...

    Cisco_Secure_ACS中文简易使用手册

    在CISCO设备上,通过命令行方式(如“tacacs-server host 202.101.110.110”)指定ACS的Tacacs+服务器地址,同时启用“tacacs-server directed-request”和设置“tacacs-server key”,完成客户端与服务器之间的安全...

    ASP.net关于解决获取code进行使用时报40163错误

    5. **服务器配置**:尽管问题出在客户端,但也有可能是服务器端的问题。检查服务器的授权策略,看是否对特定的设备或请求模式有特殊限制。 6. **日志记录与调试**:利用Android和iOS设备的日志工具,收集详细的请求...

    RealVNC 企业版V5.05(亲测可直接使用)

    用户需要先在目标机器上安装服务器端,然后在客户端设备上安装对应版本的VNC Viewer,输入正确的认证信息后,即可建立远程连接。 总的来说,RealVNC 企业版V5.05提供了一套高效、安全的远程访问解决方案,适用于...

Global site tag (gtag.js) - Google Analytics