2014-02-20 4 views
3

그래서 AFNetworking을 사용하여 API를 사용하고 있습니다.AFNetworking 2.0을 사용한 API 요청 서명

이 API는 모든 요청에 ​​hmac를 사용하여 서명해야합니다. hmac는 헤더, url 및 본문의 조합을 통해 계산됩니다. 그런 다음 hmac가 사용자 정의 헤더로 요청에 추가됩니다.

hmac를 계산하여 헤더에 추가하는 것은 문제가되지 않습니다. 그러나 요청을 처리하기 전에 "마지막 순간에"일부 헤더가 추가되는 것 같습니다.

내 API 클라이언트는 AFHTTPSessionManager의 서브 클래스이며, 나는 서명을 할 수있는 가장 좋은 장소를 찾고 있었고, 나는 현재 오버로드를하고 있어요 :

- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request 
          completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler 

내가 요청이 시뮬레이션 테스트 용 API 서버에서 수신중인 헤더를 확인하려면 요청에 서명 할 때 존재하지 않는 추가 헤더가 두 개 있습니다 (Accept-EncodingConnection). 때로는 Cookie 헤더도 수신합니다.

내가 직접 추가 한 헤더는 hmac 서명 옆에 AcceptContent-Type이고 내 고객 키를 나타내는 APIi에 특정한 맞춤 헤더가 있습니다.

제 질문은이 로그인을 수행하는 가장 좋은 방법/장소는 무엇입니까?

답변

1

AFNetworking이 헤더를 추가하지 않고 NSURLSession은 (AFHTTPRequestOperationManager로 전환 한 경우 NSURLConnection이됩니다.)

기술적으로 오버라이드 할 올바른 메서드는 이 아닌 요청 serializer 하위 클래스 인 requestWithMethod: URLString: parameters: error:입니다. AFNetworking이 이러한 헤더를 추가하지 않기 때문에 문제가 해결되지는 않습니다. (현재의 접근 방식은 괜찮 으면서 URL마다 다른 동작이 필요한 경우 유연성이 떨어집니다.)

귀하의 가능한 솔루션은 (내 의견으로는, 최악의 최고의에서 주문)됩니다

  1. (수행하는 HMAC에서 헤더를 사용하지 않도록 당신의 API를 변경하거나 전혀이 HMAC을 사용하지 왜 그들보다 우선합니다) |이 HMAC는 당신에게 HTTPS 및 SSL 피닝는
  2. 수동 요청 시리얼/세션 관리자 하위 클래스에서 이러한 헤더를 설정하지) 않습니다 (내가 NSURL [연결 세션] 생각하지 않는다 아무것도주지 . 여러 단점이 있습니다. 예를 들어 NSHTTPCookieStorage를 사용하여 직접 쿠키 저장소를 관리해야합니다. 애플 문서에 어떤 헤더가 추가되는지는 밝혀지지 않았기 때문에 모든 것을 얻을 수 있기를 바랍니다. 완전히
  3. AFNetworking 및 NSURL [세션 | 연결]을 제거
  4. 완전히을하고 낮은 수준의 CFNetwork에서 프레임 워크를 기반으로 무언가로 대체합니다 ( long-abandoned ASIHTTPRequest library는 당신의 최선의 방법 일 수 있습니다.)

편집 : 다른 하나의 아이디어 - AFHTTPSessionManagersetTaskWillPerformHTTPRedirectionBlock:으로 전화 해 볼 수 있습니다. HTTP 헤더가 그 시점에 추가 될 수 있으므로 hmac을 다시 계산할 수 있습니다. (나는 이것을 테스트하지 않았으므로 이것이 어떻게 작동하는지 알려 주시기 바랍니다.)

+0

의견을 보내 주셔서 감사합니다. 안타깝게도 옵션 1은 옵션이 아니므로이 API를 사용해야하며 샌드 박스 환경에서 사용해야합니다. 나는 확실히 옵션 2에서 기회를주고 그것에 대해 다시 할 것입니다. 옵션 3과 관련하여, 프로젝트가 포기 된 경우 차라리 지금은 피하고 싶습니다. – YoGiN

+0

@YoGiN 업데이트 된 수정 사항을 확인하고 작동하는지 알려주세요. –

관련 문제