回答:
リダイレクト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。base64UrlEncodeを実行して、URLを安全にします->
stateString = base64UrlEncode('{ "a" : "b" , "c" : 1 }');
これは、base64UrlEncoding&encodingの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、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でパラメータをリダイレクトすることができます、
googleから応答を受け取ったとき、URLでパラメーターを渡すことができますが、
以下の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はパラメーターで応答が必要なパラメーターです