2012-01-31 3 views
1

이것은 이상한 것입니다. 회사에서 실시간 판매 통계를 확인할 수있는 간단한 iPhone 응용 프로그램을 개발했습니다. 첫 번째 장애물은 앱이 이전 MSSQL 2005 서버와 통신 할 수있는 방법을 파악하는 것이 었습니다. 몇 가지 연구를 한 후 가장 빠른 방법은 response.write() 호출로 쿼리 결과를 토해내는 기본 ASP 페이지를 만드는 것입니다. 이것은 실제로 잘 작동하지만 결과를 반환하는 ASP 페이지는 전 세계에 열려 있습니다. 내가 가진 '보안'메커니즘은 서버 측의 HTTP 포트를 변경하는 것이 아닙니다.ASP 페이지와 Cocoa/ObjC 간의 보안 통신

그럼 내 질문은 - 이것에 대한 모범 사례는 무엇입니까? 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

StackOverflow에 오신 것을 환영합니다! 언제든지 [FAQ] (http://stackoverflow.com/FAQ)를 읽고 잠시 머물러보십시오. 또한 사용자 이름과 gravatar를 선택하는 것을 주저하지 마십시오. – Moshe

답변

3

당신은 당신이 각 요청에 사용자 이름과 암호를 추가 할 수있는 (예를 들어 다이제스트) HTTP 인증을 사용할 수 있습니다. Objective-C가 관련 다이제스트 토큰을 생성하는 데 필요한 라이브러리를 가지고 있는지 여부는 알 수 없지만 사용하지 않으면 HTTP 라이브러리 중 하나를 사용할 수 있습니다.

는 그런 다음 사용자 이름과 암호를 알고있는 사람 만이 그 URL에 액세스 할 수 있도록 IIS 내에서 필요한 인증을 추가 할 수 있습니다.

목표 - C, 특별한 임의의 값과 X-인증 같은에서 HTTP 요청에 특별한 헤더를 추가하는 것 그 일을하는 또 다른 방법 (이것은 미리 정의 된 GUID 될 수 있습니다).

요청

은 특별한 헤더로 전송됩니다 그리고 당신은 그 존재와 ASP의 값을 확인할 수 있습니다.

나는 또한 아무도 밖으로 데이터를 도청 할 수 없도록 당신이 HTTPS를 통해 요청에 액세스 할 수 있도록 SSL을 추가 건의 할 것입니다.

+0

우수, 지금은 최고의 솔루션 같아 보입니다.기본적으로 @ "http://myurl.com?auth=blahblahblahsomethingcrazy에 상수를 설정하고 내 ASP 코드에서 확인한 다음 SSL을 사용하여 해당 정보 스트림을 숨길 수 있습니다. SSL을 더 연구해야하지만 이것은 좋은 첫 번째 단계 – alukaiser

+0

아무 것도 저장되지 않도록하는 가장 좋은 방법은 "auth"매개 변수를 사용하여 objective-c 코드에서 HTTP POST를 수행하거나 URL 매개 변수가 아닌 HTTP HEADER (URL 쿼리 매개 변수)를 전달하는 것입니다. –

1

SSL로 통신을 마무리하십시오.

은 사용 사례를 바탕으로, 당신은 단지 당신의 응용 프로그램 (아이폰에서 실행이) 당신의 웹 서비스에 액세스 할 수 있어야합니다. 이렇게하려면 ASP 서비스가 실행되는 웹 서버의 끝점과 앱간에 상호 인증 된 SSL을 구성하십시오. 앱이 서버와 통신하는 경우에만 CA 발행 SSL 인증서는 필요 없지만 자체 서명 인증서를 사용할 수 있습니다. 서버에 자체 서명 된 ID 인증서를 배포하고 응용 프로그램 내에 자체 서명 된 클라이언트 ID 인증서를 리소스로 배포합니다. 클라이언트 인증서가 필요하도록 서버를 구성하고 발행 한 앱과 앱이 사용하는 인증서 만 허용하십시오. 그러면 서버가 클라이언트 응용 프로그램의 요청 만 수락하게됩니다. 서버에 배포 된 서버 인증서 만 신뢰하도록 (즉, 서버와 통신하여이 데이터를 얻을 수 있도록) 클라이언트가 연결시 클라이언트 인증서를 제공하도록 설정합니다 (서버에서 인증 할 수 있도록). 그런 다음 앱만 서버로 호출 할 수 있으며 클라이언트는 유효한 소스에서만 데이터를 가져올 수 있으며 전체 트랜잭션은 암호화되고 인증됩니다.

+0

+1 사용자 이름/비밀번호를 포함시키지 않거나 사람들이 iDevice에 입력하도록하지 않으려면 +1하십시오. –