2016-10-21 4 views
3

저는 Delphi에서 데스크톱 응용 프로그램을 작성하고 Google 캘린더와 동기화하려고합니다 (Windows 만 사용하면 7 이상이됩니다). 내 시스템 레지스트리에 사용자 지정 URI 스키마를 등록 했으므로 eu.myapp:test은 내 프로그램을 실행하거나 이미 실행중인 프로그램 인스턴스에 메시지를 전달합니다.사용자 지정 URI 스키마가있는 데스크톱 응용 프로그램, 토큰 요청시 "누락 된 스키마"

인증의 첫 걸음을 내딛었습니다. 기본 브라우저를 열어 사용자에게 캘린더 수정 권한을 요청하면 인증 코드가 내 소프트웨어로 다시 걸리게됩니다.

{ 
    "error": "invalid_request", 
    "error_description": "Invalid parameter value for redirect_uri: Missing scheme: eu.myapp", 
    "error_uri": "" 
} 

내 요청 본문 : 다음과 같은 응답 본체와 함께 - OAuth 클라이언트 내가 실제 토큰을 요청하려고 할 때

그러나, 요청이 (잘못된 요청 400)를 거부, 아이폰 OS 응용 프로그램으로 등록되어 있습니다 다음과 같습니다

POST /oauth2/v4/token HTTP/1.1 
Host: www.googleapis.com 
Content-Type: application/x-www-form-urlencoded 

code=XXX& 
client_id=YYY& 
redirect_uri=eu.myapp& 
grant_type=authorization_code 

documentation에 따르면, 나는 URI는 API 콘솔에서 얻은 리디렉션을 포함하는데,하지만 난 거기에 그러한 URI를 발견하고있다. 더 오래된 답변을 찾았지만, 개발자 콘솔은 주어 졌으므로 외관상 변경되었습니다. 더 이상 관련이 없습니다. 내가 뭘 놓치고 있니?

편집 : 나는 간단한 nodejs 서버를 구축하고 SSL 인증서와 nginx를 함께 넣어 좀 더 많은 정보 를 추가, 그래서 난 사실에서 보내지는 것을 볼 수 있었다. 그런 다음 내 응용 프로그램과 예제 C# 응용 프로그램을 모두 사용하여 토큰 요청을 보내고 요청 본문을 모니터링했습니다. 유일한 차이점은 delphi url이 자동으로 코드를 인코딩한다는 것입니다 (4 % 2Fhky ... 대신 4/Fhky ...). 그것 이외에 그들은 동일하게 보였다.

또한 localhost 포트를 수신 대기하도록 응용 프로그램을 다시 작성했지만 동일한 결과가 발생했습니다. 델파이 데모에서는 사용자가 로그인 할 수있는 임베디드 브라우저 (및 작동)를 사용하여 Google API를 사용하는 방법을 보여 주지만 API 문서에 따르면 사용되지 않으며 곧 삭제 될 예정입니다. 게다가 첫 번째 리디렉션을 잘 관리 할 수있는 것처럼 보이지만 실제로 토큰을 가져 오는 것은 실패합니다.

+0

데스크톱 응용 프로그램의 경우 기본 자격 증명 또는 기타 만 사용해야합니다. iOS가 아닙니다. 그러면 리다이렉트 URI로 urn : ietf : wg : oauth : 2.0 : oob을 보낼 수 있습니다. 기본적으로 localhost를 의미합니다. – DaImTo

+0

데스크톱 애플 리케이션을위한 Google의 권장 접근 방식 인 루프백 IP 또는 맞춤 URI 스키마이며 실제로 데스크톱에서 스키마 접근 방식을 사용할 때 클라이언트 유형으로 iOS를 선택해야한다고 말합니다. 데모] (https://github.com/googlesamples/oauth-apps-for-windows/tree/master/OAuthUniversalApp) – Oxudes

+0

https://developers.google을 따라 가면서 C# 샘플을 현재 사용하려고합니다. .com/youtube/analytics/registration_an_application 설치된 응용 프로그램은 데스크톱 컴퓨터 또는 휴대용 장치에서 실행됩니다. Android, Chrome, iOS 및 기타 설치된 애플리케이션에 대한 OAuth 2.0 자격증 명을 만들 수 있습니다. 개인적으로 나는 다른 유형을 선호합니다. 데모의 저자에게 도움을 청할 수 있는지 문의하십시오. 나는 전에 그렇게 많은 도움이되지 않을 것임을 보지 못했습니다.C# 용 Google .Net 클라이언트 라이브러리를 사용하는 것으로 보이지 않습니다. 그래서 내 견본은 많은 도움이되지 않을 것입니다. 행운을 빌어 요 – DaImTo

답변

0

내 오류를 발견. 매개 변수가 요청을하는 데 책임이있는 델파이 구성 요소에 의해 자동으로 인코딩되는 것으로 나타났습니다. 토큰 요청의 매개 변수로 설정하기 전에 수동으로 리디렉션 URI를 인코딩했습니다. 그런 다음 구성 요소가이를 다시 인코딩하므로 코드 요청에 제공된 URL과 다르게되어 uri_mismatch 오류가 발생합니다.

두 번째 요청이 리디렉션되지 않아도 유효성 검사 매개 변수로 redirect_uri를 계속 사용하기 때문에 두 요청에서 모두 동일해야합니다.