google oauth2 redirect_uri çeşitli parametrelerle


120

Google oauth2 redirect_uri'ye parametreler nasıl eklenir?

Aynen bunun gibi redirect_uri=http://www.example.com/redirect.html?a=b.

bBir a=brastgele.

Kimse yardım edebilir mi?

Yanıtlar:


236
  1. 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

  2. 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:

http://code.google.com/apis/accounts/docs/OAuth2.html


base64, veriyi gizlemek ve url kodlamak için kullanılır, eğer belirsizlik yoluyla biraz daha fazla 'güvenliğe' ihtiyacınız varsa.
ricosrealm

@DhruvPathak mükemmel, linkedin API yönlendirmesi ile özel bir parametre göndermem gerekiyordu ve bu sizin anlattığınız yöntemle aynı.
ericsicons

5
Durum parametresi, OAuth akışı sırasında CSRF saldırılarını önlemek için kullanılır. Akışı başlatırken durum parametresinde bir belirteç ayarlamanız ve redirect_uri'nize ulaşıldığında durum parametresinde aynı belirteci geri alıp almadığınızı kontrol etmeniz gerekir. Bu cevapta yapılanı yapmayın. Oturuma dayalı bir çözüm muhtemelen bakmanız gereken şeydir.
Rahim

2
stateUri'yi yeniden yönlendirmek ve aynı zamandaCSRF saldırıyı önlemek için birkaç parametreyi geçirmek için param'ı nasıl kullanabilirim ?
hellboy

1
@hellboy Ben de aynı şeyi merak ediyorum. Durum parametresine birkaç parametre eklemeyi başardınız mı (özel değerler ve CSRFsaldırıları önleme )?
Kevin Etore

4

.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);

4
Bu, gök mavisi gibi bir web çiftliği kullanıldığında ölçeklenmez.
harcayan

3
@spender: yani aynı istemciden gelen iki isteğin web çiftliğindeki farklı sunucular tarafından ele alınabileceğini ima ediyorsunuz. Durum buysa, etkilenen tek şey bu değildir, temelde Oturum değişkeni bu senaryoda hiçbir şey için kullanılamaz. BTW: Tartışmıyorum - aslında burada öğrenmeye çalışıyorum.
rufo

6
Tamamen mümkün, evet ... Bir oturum sunucusuyla oturumu yöneterek veya oturumu veritabanına yedekleyerek (bkz. Msdn.microsoft.com/en-us/library/ms178586.aspx ) veya yapışkan oturumları etkinleştirerek bunu azaltabilirsiniz. istemcilerin her zaman aynı web sunucusu düğümüne dönmesini sağlamak için yük dengeleyicinizde. Bahsettiğim tüm seçenekler, kurulacak bir PITA'dır, bu nedenle IMO'nun herhangi bir istemci durumunu saklamaktan Sessionkaçınılması gerekir.
harcayan

2

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


Durum parametresinin google tarafından sağlanan PHP kodunda gönderildiği yer burasıdır. Sunucu tarafında yapılan üç istek var. Bu, son isteğin hiçbir sorgu dizesi değişkenine sahip olmayacağı anlamına gelir.
lol

tıkır tıkır çalışıyor! Durum parametresinde bilgi gönderebileceğimizi biliyorum, ancak uygulama doğrudan istek parametresi olarak herhangi bir değer bekliyorsa, başarısız olur. Sağladığınız yöntem bu senaryo için mükemmel. Teşekkürler!
Jayant Varshney
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.