这是一个奇怪的。我在我的公司开发了一个简单的iPhone应用程序来检查实时销售统计数据。第一个障碍是弄清楚如何让应用程序与我们旧的MSSQL 2005服务器进行通信。经过一些研究后,似乎最快的方法是创建一个基本的ASP页面,它会通过response.write()调用来吐出查询结果。这实际上非常好 - 但返回结果的ASP页面对整个世界开放。我所拥有的唯一“安全”机制实际上并不是一个 - 改变服务器端的HTTP端口。
所以我的问题是 - 这是什么最佳做法? ASP和Objective-C之间有什么用?我已经阅读了一些基本的质询 - 响应,加密等等,但对于一系列通常无法理解的简单销售数字来说,这似乎有些过分。随着应用程序发展成更复杂的东西,我想在asp开始发送更多敏感数据之前解决这个问题。
这是我与服务器代码的连接,如果有帮助的话。常量就在那里,所以我可以将POST数据附加到它以根据我想要的应用程序获得不同的统计数据。这个的逻辑在别处,并不是很重要。
NSString * const appDataUrl = @"http://{the url for the asp page}";
//Don't ask me how this works. Google FTW...
-(NSString *) pullData:(NSString *) url {
NSError * error = nil;
NSURLResponse * response = nil;
NSData * downloadedData =
[NSURLConnection sendSynchronousRequest:
[NSURLRequest requestWithURL:
[NSURL URLWithString:url]] returningResponse:&response error:&error];
NSString *strData = [[NSString alloc]initWithData:downloadedData encoding:NSUTF8StringEncoding];
return strData;
}
谢谢你们。
答案 0 :(得分:3)
您可以使用HTTP身份验证(例如摘要),在其中为每个请求添加用户名和密码。我不知道Objective-C是否有必要的库来生成相关的摘要令牌,但如果没有,你可以使用其中一个我确定可以处理的HTTP库。
然后,您可以在IIS中添加所需的身份验证,以便只有知道用户名和密码的人才能访问该URL。
另一种方法是在Objective-C中为HTTP请求添加一个特殊的标头,例如带有特殊随机值的X-Auth(它可以是预定义的GUID)。
请求将与该特殊标头一起发送,您可以在ASP中检查其存在及其值。
我还建议添加SSL,以便您可以通过HTTPS访问此请求,以便没有人可以嗅出数据。
答案 1 :(得分:1)
使用SSL包装通信。
根据您的使用案例,您只希望您的应用(在iPhone上运行)能够访问您的网络服务。为此,请在应用程序与运行ASP服务的Web服务器上的端点之间配置经过相互身份验证的SSL。如果您的应用只与您的服务器通信,则不需要CA颁发的SSL证书,但可以使用自签名证书。在服务器上部署自签名身份证书,并在应用程序中部署自签名客户端身份证书作为资源。将服务器配置为需要客户端证书,并且只允许您发布的应用程序和您的应用程序正在使用这将导致您的服务器仅接受来自客户端应用程序的请求。将客户端配置为仅信任服务器上部署的服务器证书(因此它只能与您的服务器通信以获取此数据)并在连接时显示客户端证书(因此它可以向服务器验证自身)。然后,只有您的应用程序可以调用您的服务器,客户端只能从您的有效来源获取数据,并且整个交易都经过加密和验证。