2013-02-13 4 views
1

Google 드라이브 액세스에 대한 초기 승인을하고 있습니다. "state"매개 변수에 전체 URL을 전달하여 "redirect_uri"에서 보내는 페이지 이름에서 추가 리디렉션을 할 수 있습니다. 그래서 내 요청 URL은Google oauth2에 대한 상태 매개 변수의 URL 인코딩이 리디렉션 중에 디코딩됩니다.

https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=000000000000.apps.googleusercontent.com&redirect_uri=https%3A%2F%2Fmy.server.com%2Fx%2Fws-catch.php&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&access_type=offline&상태 = HTTPS % 3A % 2F % 2fmy.server.com % 2fRoot % 2fDirectory % 2fGoogle.php % 3fpid % 3dc907a55c-87f8-4ba8-8a16-478a9e6cba70 ... 다음과 같다 % 26prov % 3dsrv50758c7a0cfcd6.527662862

"state"매개 변수는 URL 인코딩 된 것입니다. Google 문서에 따르면이 매개 변수는 전달 된 값을 얻을 수 있도록 라운드 트립되어 있습니다. 그러나 state 매개 변수는 "redirect_uri"에 지정된 페이지에 도달 할 때 부분적으로 디코딩됩니다. 나는 인증 요청을 거부 할 때 브라우저가 어디로 가는지 여기에

https://my.server.com/x/ws-catch.php?error=access_denied&state=https://my.server.com/Root/Directory/Google.php?pid%3Dc907a55c-87f8-4ba8-8a16-478a9e6cba70%26prov%3Dsrv50758c7a0cfcd6.527662862

공지 인코딩되지 않은 ...입니다 "?" 이제 "상태"매개 변수의 문자. 리디렉션 할 때 Google에 문제가 있습니까? 내가 할 수있는 매개 변수를 base64 인코딩 제안 하나의 게시물을 읽었지만 왜 URL 인코딩과 함께 작동하지 않았는지 이해하고 싶었어요.

*** 편집

여기는 Google의 원시 302입니다. 위에 붙여 넣은 URL과 같아야합니다.

HTTP/1.1 302 Moved Temporarily 
Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
Pragma: no-cache 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Date: Thu, 14 Feb 2013 16:23:37 GMT 
Location: https://my.server.com/x/ws-catch.php?error=access_denied&state=https://my.server.com/Root/Directory/Google.php?pid%3Dc907a55c-87f8-4ba8-8a16-478a9e6cba70%26prov%3Dsrv50758c7a0cfcd6.527662862 
Content-Type: text/html; charset=UTF-8 
Content-Encoding: gzip 
X-Content-Type-Options: nosniff 
X-Frame-Options: SAMEORIGIN 
X-XSS-Protection: 1; mode=block 
Content-Length: 325 
Server: GSE 
+0

당신의 브라우저가 아닌가? 나는 크롬이 URL을 디코딩하는 경향이 있다고 생각한다. Google에서 원시 302를 얻으려고 했습니까? – Jerome

답변

1

URL 인코딩에는 '?'을 인코딩 할 필요가 없습니다. 또는 ':'또는 '/'를 사용하여 쿼리 매개 변수 값으로 나타낼 수 있습니다. 따라서 Google이 생성 한 응답은 올바르게 인코딩되므로 서버에서 구문 분석 오류가 발생하지 않아야합니다.

0

전체 상태 매개 변수를 Base64로 인코딩하면 전송 한대로 다시 가져올 수있는 안전한 방법입니다.