답변:
리디렉션 uri에 아무것도 추가 할 수 없으며 리디렉션 uri는 Oauth의 앱 설정에 설정된대로 일정합니다. 예 : http://www.example.com/redirect.html
여러 매개 변수를 리디렉션 URI에 전달하려면 state
Oauth URL을 호출하기 전에 매개 변수에 저장해야합니다. 승인 후 URL은 다음과 같은 리디렉션 URI에 동일한 매개 변수를 보냅니다.
state=THE_STATE_PARAMETERS
따라서 귀하의 경우 다음을 수행하십시오.
/1. 매개 변수의 json 문자열 만들기->
{ "a" : "b" , "c" : 1 }
/ 2. URL을 안전하게 만들기 위해 base64UrlEncode 수행->
stateString = base64UrlEncode('{ "a" : "b" , "c" : 1 }');
다음은 base64UrlEncoding 및 디코딩의 PHP 예제입니다 ( http://en.wikipedia.org/wiki/Base64#URL_applications ).
function base64UrlEncode($inputStr)
{
return strtr(base64_encode($inputStr), '+/=', '-_,');
}
function base64UrlDecode($inputStr)
{
return base64_decode(strtr($inputStr, '-_,', '+/='));
}
이제 상태는 다음과 같습니다. stateString-> asawerwerwfgsg,
OAuth 인증 URL에이 상태를 전달합니다.
https://accounts.google.com/o/oauth2/auth?
client_id=21302922996.apps.googleusercontent.com&
redirect_uri=https://www.example.com/back&
scope=https://www.google.com/m8/feeds/&
response_type=token&
state=asdafwswdwefwsdg,
서버 측 흐름의 경우 토큰과 함께 제공됩니다. http://www.example.com/redirect.html?token=sdfwerwqerqwer&state=asdafwswdwefwsdg ,
클라이언트 측 흐름의 경우 액세스 토큰과 함께 해시로 제공됩니다. http://www.example.com/redirect.html#access_token=portyefghsdfgdfgsdgd&state=asdafwswdwefwsdg ,
상태를 검색하고 base64UrlDecode it, json_decode하면 데이터가 있습니다.
여기에서 Google OAuth 2에 대해 자세히 알아보세요.
state
param을 사용 하여 여러 매개 변수를 전달하여 uri를 리디렉션 하고 동시에CSRF
공격 을 방지 하려면 어떻게해야합니까?
CSRF
있었습니까 (사용자 지정 값 및 공격 방지 )?
.NET에있는 경우 세션에 매개 변수를 저장할 수 있습니다.
HttpContext.Current.Session[{varname}]
매개 변수없이 인증 페이지로 리디렉션
Response.Redirect(your_uri_approved_with_no_querystring_parameters);
Session
것은 피해야합니다.
아래와 같이 url로 매개 변수를 리디렉션 할 수 있습니다.
url로 매개 변수를 전달할 수있는 것보다 Google에서 응답을 받으면
아래의 PHP 코드를 참조하십시오 .
if (isset($_GET['code'])) {
$client->authenticate();
$_SESSION['token'] = $client->getAccessToken();
$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL) . '?r=page/view');
}
위의 예에서 r = page / view 는 매개 변수로 응답을 원하는 매개 변수입니다.