2015-01-14 2 views
1

이 질문이 전체 컨텍스트와 비슷하거나 명확하지 않은 것으로 알고 제 첫 번째 질문을 게시하면 익숙해 짐에 따라 개선 될 것입니다. 가까운 해결책을 찾기 위해 유사한 문제 문을 검색하려고했습니다.iOS에서 NSURLSessions를 사용하는 서버 API oAuth2 인증

oauth2 인증을 사용하여 API를 인증 할 수 있도록 클라이언트 ID, 비밀번호, 리디렉션 URL을 웹 서버에서 제공합니다. 따라서 웹 서비스를 사용하기 전에 클라이언트는 API 호출에 제공 할 토큰을 받기 위해 승인 토큰 핸드 셰이크를 수행해야합니다. 와 NSURL을 만들어 내 IOS 클라이언트 응용 프로그램에서

같은 :

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil]; 

NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request]; 
[postDataTask resume]; 

을 그리고 대리인 리디렉션 핸들러를 만들었습니다

NSString* urlString = [NSString stringWithFormat:@"%@/oauth/authorize/?client_id=%@&response_type=code&redirect_uri=%@",myServerHostName, myAppClientId,myServerRedirectHostname]; 
NSURL *url = [NSURL URLWithString:urlString]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 
[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setValue:@"utf-8" forHTTPHeaderField:@"charset"]; 
[request setHTTPMethod:@"POST"]; 

이 NSURLRequest 위의와 적절한 매개 변수와 NSURLSession 및 NSURLSessionDataTask 만들기 새 리디렉션 URL을 다음과 같이 가져올 수 있습니다.

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionDataTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)response newRequest:(NSURLRequest *)newRequest completionHandler:(void (^)(NSURLRequest *))completionHandler { 

     //Doing stuff : Grab the new redirected URL to get the oauth2 code. from the URL. 
} 

oauth2를 액세스/사용 전에 인증하기위한 합법적 인 방법 일 수 있습니까?

현재 내 서버는 위의 요청을 받으면 500을 던져 실패합니다.

Completed 500 Internal Server Error in 14ms 

NameError (undefined local variable or method `login_path' for #<Doorkeeper::AuthorizationsController:0x000001078c1560>) 

하지만 웹을 통해이 작업을하려고하면 예를 들어 '고급 REST 클라이언트'를 사용하여, 클라이언트가 성공적으로 (상태 코드 302) 리디렉션 URL을받습니다.

답변

0

송신 요청이 절대적으로 정확했다는 것을 나중에 알게되었는데, 서버 측에서는 리디렉션이 실패 했으므로 인턴이 인증을 위해 가입 링크로 리디렉션하여 도어 500을 수신하고 있었기 때문에 도어 키퍼 보석 구현을 사용하고있었습니다. 모든 oauth2 인증은 이상적인 사용자 계정 없이는 수행 할 수 없습니다.