จะเพิ่มพารามิเตอร์ลงใน google oauth2 redirect_uri ได้อย่างไร?
เพียงเท่านี้redirect_uri=http://www.example.com/redirect.html?a=b
.
b
ของa=b
เป็นแบบสุ่ม
ใครก็ได้ช่วยหน่อย
จะเพิ่มพารามิเตอร์ลงใน google oauth2 redirect_uri ได้อย่างไร?
เพียงเท่านี้redirect_uri=http://www.example.com/redirect.html?a=b
.
b
ของa=b
เป็นแบบสุ่ม
ใครก็ได้ช่วยหน่อย
คำตอบ:
คุณไม่สามารถเพิ่มอะไรลงใน 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 }');
นี่คือตัวอย่าง PHP ของ base64UrlEncoding & decoding ( 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,
ผ่านสถานะนี้ใน URL การให้สิทธิ์ OAuth:
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
พารามิเตอร์เพื่อส่งผ่านพารามิเตอร์หลายตัวเพื่อเปลี่ยนเส้นทาง uri และป้องกันCSRF
การโจมตีในเวลาเดียวกันได้อย่างไร
CSRF
การโจมตี) หรือไม่
หากคุณอยู่ใน. NET คุณสามารถบันทึกพารามิเตอร์ใน Session
HttpContext.Current.Session[{varname}]
และเปลี่ยนเส้นทางไปยังหน้าการอนุญาตโดยไม่มีพารามิเตอร์
Response.Redirect(your_uri_approved_with_no_querystring_parameters);
Session
ควรหลีกเลี่ยงIMO การจัดเก็บสถานะไคลเอ็นต์ใด ๆ
คุณสามารถเปลี่ยนเส้นทางพารามิเตอร์ด้วย 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คือพารามิเตอร์ที่ฉันต้องการให้ตอบกลับด้วยพารามิเตอร์