Yanıtlar:
Yönlendirme uri'sine hiçbir şey ekleyemezsiniz, yönlendirme uri'si Oauth'un uygulama ayarlarında ayarlandığı gibi sabittir. örneğin: http://www.example.com/redirect.html
Yönlendirme uri'nize birkaç parametre iletmek için, state
Oauth url'sini çağırmadan önce parametrelerde saklanmasını sağlayın, yetkilendirmeden sonraki url, aynı parametreleri yönlendirme uri'nize gönderecektir.
state=THE_STATE_PARAMETERS
Öyleyse davanız için şunu yapın:
/ 1. parametrelerinizden bir json dizesi oluşturun ->
{ "a" : "b" , "c" : 1 }
/ 2. URL'yi güvenli hale getirmek için bir base64UrlEncode yapın ->
stateString = base64UrlEncode('{ "a" : "b" , "c" : 1 }');
Bu, base64UrlEncoding & kod çözmenin bir PHP örneğidir ( http://en.wikipedia.org/wiki/Base64#URL_applications ):
function base64UrlEncode($inputStr)
{
return strtr(base64_encode($inputStr), '+/=', '-_,');
}
function base64UrlDecode($inputStr)
{
return base64_decode(strtr($inputStr, '-_,', '+/='));
}
Öyleyse şimdi durum şu şekilde olacaktır: stateString -> asawerwerwfgsg,
Bu durumu OAuth yetkilendirme URL'sinde geçirin:
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,
Sunucu tarafı akışı için, belirteçle birlikte gelir: http://www.example.com/redirect.html?token=sdfwerwqerqwer&state=asdafwswdwefwsdg ,
İstemci tarafı akışı için, erişim belirteciyle birlikte karma olarak gelir: http://www.example.com/redirect.html#access_token=portyefghsdfgdfgsdgd&state=asdafwswdwefwsdg ,
Durumu geri alın, base64UrlDecode it, json_decode ve verileriniz sizde olsun.
Google OAuth 2 hakkında daha fazla bilgiyi burada bulabilirsiniz:
state
Uri'yi yeniden yönlendirmek ve aynı zamandaCSRF
saldırıyı önlemek için birkaç parametreyi geçirmek için param'ı nasıl kullanabilirim ?
CSRF
saldırıları önleme )?
.NET içindeyseniz, parametreleri Oturuma kaydedebilirsiniz.
HttpContext.Current.Session[{varname}]
ve yetkilendirme sayfasına parametreler olmadan yönlendirme
Response.Redirect(your_uri_approved_with_no_querystring_parameters);
Session
kaçınılması gerekir.
Aşağıdaki gibi bir url ile parametreyi yönlendirebilirsiniz,
Google'dan yanıt aldığınızda, url ile parametre geçirebileceğinizden daha fazla,
Aynı için aşağıdaki php koduna bakın ,
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');
}
Yukarıdaki örnekte r = sayfa / görünüm , parametresiyle yanıtı istediğim parametredir