iPhone应用程序的安全登录和会话管理

Posted

技术标签:

【中文标题】iPhone应用程序的安全登录和会话管理【英文标题】:secure log in and session management for iphone app 【发布时间】:2010-11-08 08:39:54 【问题描述】:

我有一个服务器(不是一个网络服务器,只是低级 tcp 套接字服务器),我想知道如何通过 iphone 安全登录(可能使用 ssl)、管理会话和通信与服务器(可能使用 aes)。我的想法是“使用 ssl 登录并交换 aes 密钥”和“以后使用该 aes 密钥进行通信”。有人有更好的主意吗?请提供一些示例代码来做这些事情。

【问题讨论】:

+1 用于询问代码。通常是-1,但不是在这个区域。加密太难了。没有小错误。 【参考方案1】:

看看CFReadStream 和CFWriteStream。您也可以使用 CFStream 类型设置 SSL 连接。

要设置 SSL 连接,您需要类似以下内容:

NSString *host = @"example.com";
unsigned port = 1234;
CFReadStreamRef     readStream;
CFWriteStreamRef    writeStream;

CFHostRef remoteHost = CFHostCreateWithName(kCFAllocatorDefault, 
                                            (CFStringRef) host);

//Create a socket pair for reading and writing
CFStreamCreatePairWithSocketToCFHost(kCFAllocatorDefault, 
                                     remoteHost, 
                                     port, 
                                     &readStream, 
                                     &writeStream);

//Setup ssl properties - Customize it to yout needs
NSDictionary *sslProperties = [NSDictionary dictionaryWithObjectsAndKeys:
                                (NSString *)kCFStreamSocketSecurityLevelNegotiatedSSL, kCFStreamSSLLevel, 
                                   kCFBooleanTrue, kCFStreamSSLAllowsAnyRoot,
                                   kCFBooleanFalse, kCFStreamSSLValidatesCertificateChain,
                                   kCFNull, kCFStreamSSLPeerName,
                                   kCFBooleanFalse, kCFStreamSSLIsServer,
                                   nil];

CFReadStreamSetProperty(readStream, 
                        kCFStreamPropertySSLSettings, 
                        sslProperties);

CFWriteStreamSetProperty(writeStream, 
                         kCFStreamPropertySSLSettings, 
                         sslProperties);    


CFStreamClientContext readContext = 0, self, NULL, NULL, NULL;
CFOptionFlags registeredReadEvents = kCFStreamEventHasBytesAvailable 
                                    | kCFStreamEventErrorOccurred 
                                    | kCFStreamEventEndEncountered 
                                    | kCFStreamEventOpenCompleted;


//replace OnReadStreamEvent with your own callback
if(CFReadStreamSetClient(readStream, registeredReadEvents, OnReadStreamEvent, &readContext)) 
    CFReadStreamScheduleWithRunLoop(readStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);


CFStreamClientContext writeContext = 0, self, NULL, NULL, NULL;
CFOptionFlags registeredWriteEvents = kCFStreamEventCanAcceptBytes 
                                        | kCFStreamEventErrorOccurred 
                                        | kCFStreamEventOpenCompleted;

//replace OnWriteStreamEvent with your own callback
if(CFWriteStreamSetClient(writeStream, registeredWriteEvents, OnWriteStreamEvent, &writeContext)) 
    CFWriteStreamScheduleWithRunLoop(writeStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);

这是从文档中可能难以弄清楚的部分。也许这可以帮助您入门。

【讨论】:

一个 c++ 替代品可能是 Boost.Asio

以上是关于iPhone应用程序的安全登录和会话管理的主要内容,如果未能解决你的问题,请参考以下文章

iPhone“书签到主屏幕”删除 cookie 和会话?

在 iPhone 中保存 Spotify 登录的用户会话

在会话iphone中存储用户名和密码

在 iPhone 上的 Web 应用程序中维护 PHP 会话

Facebook Graph API:在 iPhone 上恢复会话

是否有必要在服务器端开发具有会话令牌控制的 iPhone Native App?