Oauth VKontakte. Strategie distribuce pověření. Jak odebrat OAuth2 Playground z ID klienta
Populární protokol, který umožňuje sociální služby se vzájemně integrují a umožňují bezpečným způsobem výměna osobních údajů. OAuth může propojit 2 služby, z nichž každá má svou vlastní uživatelskou základnu - to je to, co hledám v tomto případěŘíkám tomu „sociální“. Když začnete pracovat s OAuth, první pocit je, že protokol je velmi složitý a nadbytečný. V tomto článku se pokusím vysvětlit základy OAuth v lidské řeči.
Příklad křížové autorizace
Vraťme se do roku 2005 a představme si, že píšeme sociální síť. Má formulář pro import kontaktů z adresy GMail knihy. Co je potřeba pro přístup Kontakty v Gmailu? Samozřejmostí je přihlašovací jméno a heslo do schránky. Pokud vás ale požádáme o jejich zadání na našem webu, uživatel bude mít podezření, že něco není v pořádku. Kde je záruka, že zadaná hesla neuložíme na server? Chceme tedy, aby bylo zadáno heslo pouze na webu GMail a poté přístup ke kontaktům přes GMail API zajistil náš sociální síť(možná na chvíli). Domluvme se na podmínkách.- Spotřebitel: spotřebitel; skript pro zpracování formuláře pro import kontaktů na sociální síti.
- Poskytovatel služeb: poskytovatel dat; GMail obsahující data adresáře, která jsou pro spotřebitele zajímavá.
- Uživatel: uživatel, který má účet u Spotřebitele i u Poskytovatele služby.
- Chráněný zdroj: osobní údaje; kontakty z adresáře na GMail (tj. zdroje poskytovatele služeb).
- API poskytovatele: GMail API, které umožňuje libovolnému skriptu načíst kontakty z adresáře GMail.
Jak se liší OAuth od OpenID?
OAuth se často označuje jako „protokol robota“, na rozdíl od OpenID jako „uživatelský protokol“. Nepleťte si je!- OpenID je protokol pro zrychlenou registraci. OpenID umožňuje uživateli získat účet na jakékoli službě bez zadání hesla, pokud je již registrován někde jinde na internetu. (A pak se můžete přihlásit ke službě bez zadávání hesla a být „někde“ autorizováni.) Pokud máte například účet na Yandexu, můžete jej použít k „přihlášení“ k jakékoli službě, která podporuje autorizaci OpenID.
- OAuth je protokol pro autorizovaný přístup k API třetích stran. OAuth umožňuje spotřebitelskému skriptu získat omezený přístup API k datům poskytovatele služeb třetí strany, pokud dá uživatel souhlas. Tito. je to prostředek pro přístup k API.
Policejní analogiePředstavte si, že jste zaměstnancem kriminálky a hledáte konec případu Krádež WebMoney pro rok 1973. Domluvme se na podmínkách:
|
Nástin tohoto článku
Než přejdeme k hlavní části, podívejme se, jak přesně budeme postupovat.- Podívejme se na problémy, které vznikají při implementaci křížové autorizace „ručně“.
- Pojďme si promluvit o tom, co je to „aplikace“ a kdo je Spotřebitel.
- Pojďme se dotknout základů kryptografie.
- Označme demo aplikaci, kterou napíšeme v tomto článku.
- Pojďme se rozhodnout testovací server OAuth, se kterým budeme experimentovat.
- Pojďme si projít všechny kroky Protokol OAuth a poskytnout zdrojový kód skriptu.
O vynálezu jízdních kol
Dobrým způsobem, jak něčemu porozumět, je udělat to sami, šlápnout na všechny vyložené hrábě po cestě. Nyní znovu objevíme kolo: zkusme si představit, jak bychom vyřešili problém interakce mezi spotřebitelem a poskytovatelem služeb bez jakýchkoli standardizovaných protokolů.Nejprve napíšeme samotný formulář pro import kontaktů z GMailu: Dále požádáme vývojáře GMail, aby zajistili, že když uživatel přejde na URI /auth.php, dostane autorizační formulář (v našem veloworldu GMail je napsán v PHP). Po úspěšném zadání hesla by měl být uživatel přesměrován na web, jehož URL je uvedeno v parametru retpath. Kromě toho musí být v URL předán určitý tajný klíč, který již lze použít pro přístup k GMail API.
Uživatel se tedy po zadání hesla vrátí na naše stránky na následující adresu: A ze skriptu /import.php se otočíme na GMail API, předáme do něj klíč Y49xdN0Zo2B5v0RR a načteme kontakty: No, pojďme počítat hrábě (protože hrboly bude pozdě počítat).
První rake: nahrazení návratové adresy retpath
Jistě, uhodli jste, že útočník nejprve umístí odkaz na svůj web a donutí vás na něj kliknout. V důsledku toho obdrží tajný klíč, který vrátil GMail, a tedy vaše kontakty:Druhá hra: „odposlouchávání“ tajného klíče
Řekněme, že jsme nějakým způsobem ochránili retpath a nyní může ukazovat pouze na náš web. Problém s tajným parametrem ale zůstává Tajemství může být sledováno zezadu nebo zachyceno nasloucháním WiFi provozu. Nebo jednou bude mít váš web chybu zabezpečení XSS, která vám umožní „ukrást“ tajný klíč. Díky tajemství hodnoty bude moci útočník číst vaše adresář. To znamená, že tajemství musí být chráněno před zachycením (ideálně by nemělo být přenášeno přes URL vůbec).Rake číslo tři: příliš mnoho přesměrování
Pokud každé volání API vyžaduje jiné tajemství, budeme muset zorganizovat tolik přesměrování na web poskytovatele služeb, kolik je volání. S intenzivním pomocí API funguje to velmi pomalu a je to dost nepohodlné...Rake číslo čtyři: špatná identifikace spotřebitele
GMail samozřejmě chce vědět, kdo používá jeho API. Povolit přístup k některým stránkám a odepřít přístup jiným... To znamená, že při vytváření požadavku ve formuláři pro import kontaktu musí být spotřebitel (stránka) „představen“ poskytovateli služeb (GMail). V našem případě tuto funkci částečně plní retpath (název webu v ní), ale tato metoda není univerzální, protože Mechanismus „prezentace“ musí být také aktivován při volání metod API.Nadace OAuth
Je pozoruhodné, že stále zbývá mnoho „podvodních hrábí“. Nebudu je zde popisovat, protože tyto hrábě leží v Mariánském příkopu (hluboký, 10920 m). Popis zranitelností by zabral tucet stránek. Skočím tedy rovnou do popisu OAuth, kde jsou již všechny problémy vyřešeny.Aplikace = spotřebitel + přístup k API
Při práci s OAuth je důležité, aby se pojem spotřebitel neomezoval na význam „stránky“. Spotřebitel je něco aplikace, a kde se nachází, není tak důležité. Příklady spotřebitelů z skutečný život: Ale jen s OAuth nemůžete udělat nepořádek. Ve skutečnosti vše, co OAuth poskytuje, je možnost přihlásit se vzdálená služba(poskytovatel služeb) a provádět autorizované požadavky na rozhraní API. Nezáleží na tom, jak je toto API strukturováno: může to být čistý SOAP, přístup REST atd. Hlavní věc je, že každá metoda API bere jako vstupní speciální parametry předané podle protokolu OAuth.Token = klíč + tajemství
Jeden z principů OAuth uvádí, že ne tajné klíče by neměly být v žádostech předávány otevřené (proč jsme diskutovali v příkladu výše). Proto protokol pracuje s konceptem Tokenu. Token je velmi podobný páru login + heslo: login - otevřené informace a heslo znají pouze odesílající a přijímající strany. V podmínkách OAuth se analog přihlášení nazývá klíč a analog hesla se nazývá tajné. Situace, kdy Tajemství zná pouze odesílatel a příjemce, ale nikdo jiný, se nazývá Sdílené tajemství.Pokud se tedy spotřebitel a poskytovatel nějakým způsobem dohodnou na sdíleném tajemství, mohou si otevřeně vyměňovat odpovídající klíče v adrese URL, aniž by se museli obávat, že tyto klíče budou zachyceny. Jak ale chránit adresy URL s klíči před paděláním?
Zpráva = dokument + digitální podpis
„Digitální podpis“ zní děsivě, ale ve skutečnosti je to docela zřejmá věc. Když se na dokument podepisujete perem, potvrzujete, že dokument jste napsali vy a ne někdo jiný. Váš podpis je jakoby „přidán“ k dokumentu a jde s ním v „jedné sadě“.Stejně tak je k bloku dat přidán digitální podpis, aby bylo zajištěno, že osoba, která data vygenerovala, se nevydává za někoho jiného. Digitální podpis nezašifruje dokument, pouze zaručí jeho pravost! Stejné sdílené tajemství, které zná příjemce i odesílatel, ale nikdo jiný, vám umožňuje podepsat.
Jak to funguje? Nechte naše $sharedSecret = 529AeGWg a zašeptali jsme to do ucha přijímající straně. Chceme odeslat zprávu „Můj telefon 1234567“ pomocí garantovaná ochrana z falšování útočníkem.
- Spotřebitel přidá ke zprávě digitální podpis celkový pohled- $převod = $zpráva . "-". md5($zpráva . $sharedSecret); // $transfer = "Můj telefon je 1234567" . "-". md5("Můj telefon je 1234567" . "529AeGWg")
- Poskytovatel služeb vezme data, rozdělí je zpět na 2 části – $message a $signature – a provede přesně stejnou operaci: $signatureToMatch = md5($message . $sharedSecret); // $signatureToMatch = md5("Můj telefon je 1234567" . "529AeGWg");
Pak už zbývá jen porovnat výslednou hodnotu $signatureToMatch s tím, co bylo v přijatých datech $signature, a nahlásit falešný, pokud se hodnoty neshodují.
Ukázka fungování OAuth na jednoduché aplikaci jako příklad- Abychom získali skutečný pocit z OAuth, potřebujeme dvě věci: Skript, který implementuje klientská část
- protokol. Napsal jsem jen takový malý PHP skript (odkaz na zip archiv). Toto je widget, který lze vložit do stránek PHP. Testovací OAuth server, na kterém můžeme experimentovat. Pro tento účel je vhodné použít RuTvit: existuje stránka http://rutvit.ru/apps/new, která vám umožňuje přidat testovací aplikace
Když se podíváte na kód ukázkového skriptu a přečtete si vysvětlení níže v článku, pochopíte podrobnosti protokolu.
- Tento widget můžete vložit do libovolné webové stránky PHP pouhým zkopírováním jeho kódu a úpravou rozvržení. Zobrazí se všechny tweety ze služby RuTvit označené zadaným hash tagem a je také možné přidávat nové tweety (zde přichází na řadu OAuth). Widget využívá RuTvit API a autorizaci OAuth, která se mimochodem shoduje se standardem Twitter API. Tento skript můžete spustit na svém testovacím serveru. Chcete-li to provést, musíte provést tři kroky:
- Stáhněte si kód skriptu a nasaďte jej do libovolného vhodného adresáře na vašem webovém serveru.
- Zaregistrujte svou novou testovací aplikaci na serveru OAuth.
Po registraci aplikace nahraďte parametry OA_CONSUMER_KEY a OA_CONSUMER_SECRET ve skriptu hodnotami přijatými ze serveru.
Registrace a nastavení aplikace Pojďme si promluvit o tom, odkud aplikace pocházejí a jak se o nich poskytovatel služeb dozví. Je to docela jednoduché: Poskytovatel služeb má speciální formulář
Po registraci vaší aplikace dostanete 5 parametrů, které jsou nutné pro práci s OAuth. Takto mohou vypadat:
Zde jsou spotřebitelský klíč a zákaznický tajný klíč jakýmsi „přihlašovacím jménem + heslem“ vaší aplikace (pamatujete si výše uvedený rozhovor o tokenech? Toto je jen jeden z nich). Dovolte mi připomenout, že tajemství spotřebitele je sdílené tajemství, které zná pouze odesílatel a příjemce, ale nikdo jiný. Zbývající 3 hodnoty určují adresy URL služeb, jejichž význam nyní zvážíme.
OAuth = token požadavku na načtení + přesměrování na autorizaci + token přístupu k načtení + rozhraní API volání
V příkladu s GMail jsme použili 2 typy vzdálených hovorů: a) přesměrování přes prohlížeč; b) přístup k API ze skriptu.A odhalili jsme řadu bezpečnostních problémů, což naznačuje, že by mělo existovat více výzev. To je to, co se děje v OAuth: další přechodné požadavky jsou přidány ze skriptu spotřebitele k poskytovateli, který pracuje s tokeny. Pojďme se na ně podívat.
- Zpracování odeslání formuláře. Toto není součástí OAuth, ale součástí naší aplikace. Před přístupem k poskytovateli rozhraní API musíme od uživatele obdržet pracovní příkaz pro tuto akci. Zde je příklad takové „objednávky“:
- Fetch Request Token (interní požadavek).
- Skript Consumer přistupuje Požádat o adresu URL tokenu Poskytovatel: například api.rutvit.ru/oauth/request_token. Požadavek obsahuje spotřebitelský klíč – „přihlášení k aplikaci“ a samotný požadavek je podepsán pomocí tajného klíče spotřebitele – „hesla aplikace“, které jej chrání před paděláním.
- V reakci na to poskytovatel vygeneruje a vrátí token „naplněný odpadky“ nazvaný token požadavku. Budeme ji potřebovat později, takže ji musíme někam uložit – například do proměnné relace $S_REQUEST_TOK.
- Přesměrování na Autorizaci (přes přesměrování v prohlížeči). Nyní má naše aplikace jedinečný token požadavku. K použití tohoto tokenu je nutné získat povolení od uživatele, tzn. zeptej se ho autorizovat token požadavku.
- Spotřebitel přesměruje prohlížeč na speciální Autorizovat URL Poskytovatel: například api.rutvit.ru/oauth/authorize. Tokenový klíč požadavku je předán v parametrech.
- Poskytovatel svému uživateli zobrazí autorizační formulář a pokud je oprávněn, přesměruje prohlížeč zpět. kde přesně? A to označujeme v parametru oauth_callback.
- Fetch Access Token (interní požadavek). Prohlížeč se tedy po sérii přesměrování vrátil do naší aplikace. To znamená, že autorizace u poskytovatele byla úspěšná a token požadavku může fungovat. V OAuth pro zabezpečení má však každý token svůj vlastní, přísně omezený účel. Například Request Token se používá pouze k obdržení potvrzení od uživatele a nic jiného. Pro přístup ke zdrojům potřebujeme získat nový token – Access Token – nebo, jak se říká, „vyměnit token žádosti za přístupový token“.
- Spotřebitel odkazuje Adresa URL přístupového tokenu- například api.rutvit.ru/oauth/access_token - a požádá o udělení přístupového tokenu místo tokenu požadavku, který má. Požadavek je podepsán digitálním podpisem na základě tajného klíče požadavku.
- Poskytovatel vygeneruje a vrátí přístupový token naplněný odpadky. Ve svých tabulkách také uvádí, že tento přístupový token má povolen přístup k rozhraní API. Naše aplikace si musí ponechat přístupový token, pokud bude v budoucnu používat API.
- Call API (interní požadavek). Nyní máme přístupový token a můžeme předat jeho klíč při volání metod API.
- Spotřebitel vygeneruje požadavek na API Poskytovatele (například pomocí POST požadavku podle ideologie REST). Požadavek obsahuje klíč přístupového tokenu a je podepsán pomocí sdíleného tajemství tohoto tokenu.
- Poskytovatel zpracuje volání API a vrátí data do aplikace.
Konec skriptu: výstup widgetu
Konec skriptu by měl být jasný bez podrobných vysvětlení.Výpis 14: Konec skriptu: výstup widgetu |
// end case ) ) // Získejte všechny dostupné tweety. $text = file_get_contents("http://api.rutvit.ru/search.xml?rpp=5&q=" . urlencode("#" . TAG)); $TWEETS = new SimpleXMLElement($text); // Zkratka pro zobrazení zprávy s překódováním a citací. function e($text, $quote = 1) ( $text = iconv("utf-8", ENCODING, $text); echo $quote? htmlspecialchars($text) : $text; ) ?>
stav jako $tweet) (?>
user->screen_name)?>:
text_formatted, 0)?>
}?>
|
Užitečné odkazy na OAuth
- rutvit
V důsledku toho může klientská aplikace využívající AdWords API přistupovat k účtu AdWords bez uživatelské e-mailové adresy a hesla.
Vytváření přihlašovacích údajů OAuth2
Chcete-li vytvořit přihlašovací údaje OAuth2, postupujte podle následujících kroků.
Definování typu aplikace
Nejprve je třeba určit typ aplikace, kterou chcete vytvořit. V AdWords API jsou dva typy aplikací:
- instalovatelná aplikace(doporučeno);
- webová aplikace.
Pomocí níže uvedené tabulky určete typ aplikace, kterou potřebujete.
Co si vybrat | Situace |
---|---|
Instalovatelná aplikace(doporučeno) |
|
Webová aplikace |
|
Vytvoření ID klienta a tajného kódu
Jakmile určíte typ aplikace, klikněte na příslušnou kartu níže a podle pokynů vytvořte ID klienta a tajný klíč.
Instalovatelná aplikace
- OTEVŘENO
- Vytvořte projekt Vytvořit.
- Vytvořte přihlašovací údaje a pak - ID klienta OAuth.
- Uložit
- V sekci Typ aplikace vybrat Jiné typy a poskytnout požadované informace.
- Klikněte Vytvořit.
- identifikátor A tajný klíč
- OTEVŘENO
- Z rozbalovací nabídky projektů vyberte Vytvořte projekt, poté zadejte název projektu a v případě potřeby změňte jeho ID, poté klikněte na tlačítko Vytvořit.
- Na stránce Přihlašovací údaje vyberte Vytvořte přihlašovací údaje a pak - ID klienta OAuth.
- Můžete být požádáni o zadání názvu produktu. V tomto případě klikněte Přizpůsobte okno žádosti o přístup, zadejte požadované informace a klikněte Uložit pro návrat na obrazovku Přihlašovací údaje.
- V sekci Typ aplikace vybrat Webová aplikace. Podle pokynů zadejte zdroje JavaScriptu a/nebo URI přesměrování.
- Klikněte Vytvořit.
- Na stránce, která se objeví, zkopírujte identifikátor A tajný klíč klient - budete je potřebovat při nastavování klientské knihovny.
Podle pokynů níže nakonfigurujte použití přihlašovacích údajů OAuth2 s klientskou knihovnou vašeho jazyka.
Poznámka.Pokud se rozhodnete nepoužívat některou z našich klientských knihoven, budete muset implementovat procesy pro sebe nebo pro sebe.Hřiště OAuth2
Alternativní možností pro vytvoření přihlašovacích údajů OAuth2 je použití Hřiště OAuth2. V kombinaci s Google API Console vám tento systém umožňuje vytvářet tokeny OAuth2 sami.
Systém OAuth2 Playground je určen pro uživatele, kteří potřebují přístup k účtům pouze pro jedenúčet správce nebo uživatel AdWords. Pokud potřebujete vyzvat k zadání přihlašovacích údajů pro více uživatelů, je lepší použít klientské knihovny, jak je popsáno výše.
Nastavení
Varování.K použití Hřiště OAuth2, musíte vytvořit ID klienta Pro . Tento jediný typ aplikace, která pracuje s OAuth2 Playground. Přečtěte si více v části výše.Jak získat ID klienta a tajný klíč
- OTEVŘENO
- Vyberte existující projekt z rozbalovací nabídky nebo vytvořte nový.
- Na stránce Přihlašovací údaje vyberte Vytvořte přihlašovací údaje a pak - ID klienta OAuth.
- V sekci Typ aplikace vybrat Webová aplikace.
- V sekci přidejte následující řádek: https://site/oauthplayground
- Klikněte Vytvořit.
- Napište to identifikátor A tajný klíč klienti uvedení na zobrazené stránce.
Budete je potřebovat v dalším kroku.
Varování.Jak vytvořit tokenyTo, ke kterému účtu Google jste v prohlížeči přihlášeni, určuje, ke kterým účtům AdWords budete mít přístup pomocí vámi vytvořených přihlašovacích údajů OAuth2. Může být lepší provést tyto kroky v anonymním režimu nebo bez přihlášení k účtu Google. Je pravděpodobné, že budete muset použít přihlašovací údaje, které se liší od účtu, ve kterém jste byli, když jste obdrželi ID klienta a tajný klíč.
Jak odebrat OAuth2 Playground z ID klienta Protože už máte obnovovací token
- , již nemusíte používat OAuth2 Playground jako svůj vyřešený URI přesměrování. Chcete-li tento systém odebrat ze seznamu, postupujte takto:
- Přejít na .
- Vyberte svůj projekt z rozbalovací nabídky.
- Na stránce Přihlašovací údaje vyberte název ID klienta. Odeberte https://site/oauthplayground z pole Povolené URI přesměrování . Vezměte prosím na vědomí, že musíte odejít minimálně jeden
- Klikněte Uložit.
Přesměrování URI.
Takže máte své přihlašovací údaje OAuth. Nyní se můžete dotazovat na AdWords API a používat je s požadovanou klientskou knihovnou.
Tato část popisuje, jak získat přístup k AdWords API pomocí servisních účtů.
Účet služby je účet, který patří aplikaci, nikoli jednotlivému koncovému uživateli. Účty služeb poskytují interakci mezi webovou aplikací a službou Google. Vaše aplikace volá API jménem servisního účtu, aniž by přímo zapojovala uživatele.
AdWords API umožňuje přístup k servisnímu účtu napříč doménami G Suite.
Účet služby implementuje proces OAuth2, který namísto autorizace uživatele používá soubor klíče, který je přístupný pouze vaší aplikaci.
Používání servisních účtů poskytuje dvě významné výhody:
- Autorizace přístupu aplikace k Google API se provádí během fáze nastavení. Vyhnete se tak potížím s vyžadováním zásahu uživatele nebo ukládáním tokenů do mezipaměti v jiných tocích OAuth2.
- Předstírání identity jiných uživatelů v aplikaci, je-li to nutné, se provádí v rámci schvalovacího procesu OAuth2.
Alternativa k servisním účtům
Servisní účty se široce používají k poskytování programového přístupu k rozhraním API pomocí protokolu OAuth2 bez zásahu uživatele.
Nastavení takových účtů pro práci s AdWords API však není snadné. Jednodušší alternativa je s trvalým obnovovacím tokenem. Tento přístup umožňuje aplikaci kdykoli požádat o nové přístupové tokeny.
V rámci tohoto procesu musíte nakonfigurovat autorizaci aplikací prostřednictvím klientské knihovny, jak je popsáno výše. Toto je potřeba provést pouze jednou, protože obnovovací tokeny Google OAuth2 nikdy nevyprší.
Požadavky
- Doména G Suite, kterou vlastníte, například mydomain.com nebo mybusiness.com.
- Vývojářský token AdWords API a nejlépe testovací účet.
- pro používaný jazyk.
Nastavení přístupu ke klientskému účtu
Nejprve musíte vytvořit klíč servisního účtu v konzole Google API.
- Přihlaste se ke svému účtu G Suite a otevřete .
- Z rozbalovací nabídky projektů vyberte Vytvořte projekt, zadejte požadované informace a klikněte na tlačítko Vytvořit. Nový projekt se objeví v aktivním seznamu.
- Z nabídky v levém horním rohu vyberte IAM a administrace a pak - Servisní účty v menu vlevo.
- Klikněte Vytvořte servisní účet v horní části stránky.
- Zadejte název servisního účtu.
- Zaškrtněte políčko Vytvořte nový soukromý klíč a vyberte typ klíče JSON.
- Zaškrtněte políčko Povolte delegování přístupu k datům ve své doméně G Suite a zadejte název produktu pro okno žádosti o přístup.
- Klikněte Vytvořit. Soubor klíče JSON se začne stahovat. Uložte soubor na bezpečném místě, kam máte přístup pouze vy.
- Na stránce Servisní účty objeví se nový servisní účet.
Bezpečnostní problémy
Protože je služba G Suite spravována na úrovni domény, musíte bezpečně chránit soubor klíče, který umožňuje autorizovaným účtům přístup ke službám Google. To je zvláště důležité vzhledem k tomu, že poskytujeme servisnímu účtu možnost vydávat se za jakéhokoli uživatele domény.
Kromě toho se doporučuje, aby každý servisní účet měl přístup pouze k jednomu rozhraní Google API. K tomu slouží pole rozsah, který je popsán v další části. Toto preventivní opatření umožňuje omezit množství dat otevřených neoprávněnému přístupu v případě kompromitace souboru klíče.
Jak poskytnout možnosti předstírání identity
Chcete-li servisnímu účtu udělit možnosti zosobnění, postupujte takto:
Nyní můžete přistupovat ke svému účtu AdWords pomocí servisního účtu v rámci schvalovacího procesu OAuth2.
Nastavení klientské knihovny
Chcete-li zobrazit pokyny pro nastavení knihovny klienta, vyberte jazyk.
Poznámka.Pokud se rozhodnete nepoužívat některou z našich klientských knihoven, budete muset proces implementovat sami.Optimalizace požadavků OAuth2
Pokud vaše aplikace nepoužívá sdílení pověření, může to výrazně zvýšit počet žádostí odeslaných do Googlu. V důsledku toho mohou naše servery na takovou aplikaci uvalit omezení, což sníží rychlost jejího provozu.
Tato část popisuje, jak optimalizovat správu pověření OAuth2, aby vaše aplikace efektivněji interagovala s AdWords API.
Pozor!Pod pojmem pověření To se týká celé sady atributů pověření OAuth2, včetně přístupového tokenu a data vypršení jeho platnosti.Strategie distribuce pověření
Distribuce přihlašovacích údajů mezi požadavky API zlepšuje výkon a také zabraňuje režii a chybám způsobeným porušením omezení.
Strategie distribuce pověření závisí na návrhu aplikace.
Ve vícevláknových aplikacích musíte použít stejná pověření pro relaci každého vlákna.
Ve víceprocesových a distribuovaných aplikacích je nutné implementovat nějakou infrastrukturu pro předávání přihlašovacích údajů mezi procesy. Kromě toho musíte zajistit, aby se vlákna neblokovala a nedocházelo ke sporům.
V aplikaci, která je jak víceprocesová/distribuovaná, tak vícevláknová, musí každý proces kombinovat obě strategie.
Níže jsou uvedeny strategie pro ověření jednoho účtu AdWords, jako je například účet správce nejvyšší úrovně v hierarchii.
Dále popisuje, jak tyto strategie přizpůsobit pro .
Vícevláknové aplikace
Ve vícevláknových aplikacích musí být přihlašovací údaje k dispozici pro různá vlákna. Aktualizace pověření musí být prováděny synchronně, aby se předešlo konfliktům.
Tento diagram ukazuje vlákna, která za běhu předávají požadavky do AdWords API. Používá se sdílený fond relací (uživatelů). Všimněte si, že každá relace musí používat stejný objekt pověření. V reakci na každý požadavek API vlákno obdrží odpovídající relaci (uživatele). Pokud je třeba obnovit přístupový token, musí to být provedeno synchronně, aby se předešlo sporu. Jinými slovy, objekt pověření musí být bezpečný pro vlákna.
Klientské knihovny usnadňují předávání pověření mezi vlákny. Každá klientská knihovna má objekt relace (nebo uživatele) s pověřeními, které opakovaně používá během svého životního cyklu. Chcete-li používat přihlašovací údaje napříč relacemi, musíte je použít při vytváření každé relace. Ve všech klientských knihovnách je pověření objektem bezpečným pro vlákna, který se synchronně aktualizuje, když vyprší platnost přístupového tokenu.
Například v knihovně klienta Java byste vytvořili jedinou třídu Credential a použili ji pro všechny relace.
Multiprocesní a distribuované aplikace
Ve víceprocesových a distribuovaných aplikacích musí distribuce pověření probíhat nepřetržitě. Chcete-li se vyhnout konfliktní situaci, kdy se více serverů pokouší aktualizovat pověření současně (což má za následek nadměrné požadavky na aktualizaci), doporučujeme aktualizaci vynutit a poskytnout aktualizovaná pověření všem procesům a serverům.
Jedna úloha nebo služba může například pravidelně aktualizovat pověření a odeslat je do úložiště dat, kde je budou používat různé servery.
Diagram ukazuje periodickou aktualizaci přihlašovacích údajů a zaznamenávání jejich vlastností v datovém úložišti. Všechny servery poté obdrží pověření před odesláním požadavku na rozhraní API.
Aktualizovat úkol
Úloha aktualizace pravidelně aktualizuje přihlašovací údaje a odesílá je do úložiště dat. Tato úloha by neměla čekat na vypršení platnosti aktuálních přihlašovacích údajů, protože to způsobí, že aplikace bude nějakou dobu mimo provoz kvůli nedostatku platných přihlašovacích údajů.
Nejlepší alternativou je vynutit si pravidelné obnovování, které pokaždé nahradí přihlašovací údaje v úložišti dat novými. Aktualizační úloha by měla být provedena v dostatečném předstihu před vypršením aktuálních přihlašovacích údajů, aby byl dostatek času pro případ, že dojde k dočasné chybě. Můžete začít provedením aktualizace každých 15 minut.
Poznámka.Pokud během zpracovávání požadavku API vyprší platnost přístupového tokenu pověření, požadavek se přesto provede. Pokud například vytvoříte dlouhotrvající dotaz a zbývá vám přístup méně než minutu, výsledky se přesto vrátí.Ukládání dat
Úložiště dat se používá k poskytování přihlašovacích údajů různým procesům a serverům.
K tomu můžete použít existující datový sklad nebo vytvořit specializovaný, přes který budou servery přijímat přihlašovací údaje. Možná řešení zahrnují servery pro ukládání do mezipaměti (jako je Memcached nebo Infinispan) a úložiště dat NoSQL (jako je MongoDB).
Hlavním účelem datového skladu je poskytovat spolehlivé rozhraní všem serverům přistupujícím k API. Jeho provoz musí být optimalizován pro rychlé čtení dat: servery a procesy budou číst přihlašovací údaje častěji, než jsou aktualizovány.
Nezapomeňte si uchovat své přihlašovací údaje v bezpečí.
Při ukládání přihlašovacích údajů musíte uložit vlastnost expiry_time (aktuální čas + expires_in) a refresh_token spolu s vlastností access_token. Vlastnost expiry_time (datum vypršení platnosti tokenu) se vypočítá pomocí následujícího vzorce: access_token update request time + expires_in time (datum vypršení platnosti tokenu).
Serverový fond
Každý server ve fondu před odesláním požadavku získá nejnovější přihlašovací údaje z úložiště dat. Dokud bude úloha aktualizace probíhat úspěšně, budou pověření platná. Pokud však aktualizační úloha nebo úložiště dat selže, musí existovat nouzový mechanismus.
Pokud server nebo proces nemůže získat přihlašovací údaje z úložiště dat nebo pokud platnost přihlašovacích údajů vypršela, server musí aktualizovat své přihlašovací údaje, aby umožnil aplikaci pokračovat v práci s rozhraním API, dokud nebude problém vyřešen.
Ve vícevláknových procesech musíte použít stejnou strategii pro distribuci pověření mezi vlákna.
Ověření více účtů
Identifikační údaje vytvořené pro účet správce AdWords lze použít k přístupu ke všem podřízeným účtům. Uživatelé s jedním účtem správce obvykle potřebují pouze vytvořit přihlašovací údaje pro účet správce nejvyšší úrovně, aby mohli autorizovat aplikaci pro všechny podřízené účty AdWords.
V ostatních případech potřebuje aplikace přístup k účtům AdWords, které spolu v hierarchii účtů správce nesouvisí. Tato situace vyžaduje, abyste vytvořili a spravovali více přihlašovacích údajů pro různé účty, například pro každý klientský účet AdWords, ke kterému máte přístup, nebo pro každý účet správce nejvyšší úrovně v nezávislých hierarchiích.
Tyto strategie můžete dodržovat pro obě aplikace s minimálními změnami. Při používání sdíleného úložiště musí být přihlašovací údaje indexovány pomocí ID účtu customerId, aby bylo zajištěno, že jsou přihlašovací údaje přidruženy k požadovanému účtu. Úloha aktualizace je navíc musí aktualizovat včas. Po připojení nového účtu jej možná budete muset spustit.
A konečně, ve vícevláknových aplikacích musíte objekt pověření distribuovat pouze mezi vlákna běžící v účtu, ke kterému je přidružen.
Jak funguje OAuth2
Poznámka. AdWords API zatím nepodporuje souběžné přihlášení prostřednictvím žádosti o přístup k datům (hybridní design) nebo delegování oprávnění na úrovni domény (2LO).Rozsah
Přístupový token může poskytovat různé stupně přístupu k datům. Parametr rozsahu proměnné definuje sadu zdrojů a operací, ke kterým token poskytuje přístup. Když žádáte o přístupový token, vaše aplikace odešle jednu nebo více hodnot do parametru oboru.
Níže je uveden aktuální a starší rozsah rozhraní AdWords API.
Offline přístup
Klientská aplikace, která používá rozhraní AdWords API, obvykle vyžaduje offline přístup. K tomu může dojít, pokud vaše aplikace potřebuje spouštět dávkové úlohy, zatímco uživatel prohlíží váš web bez připojení k internetu.
Nainstalované aplikace ve výchozím nastavení používají offline přístup.
hlavička HTTP požadavku
Hlavička HTTP v každém požadavku na server AdWords API musí obsahovat následující formulář:
Oprávnění: nositel THE_ACCESS_TOKEN
POST ... HTTP/1.1 Host: ... Autorizace: Bearer 1/fFAGRNJru1FTz70BzhT3Zg Content-Type: text/xml;charset=UTF-8 Content-Length: ...
Přístup a obnovení tokenů
Ve většině případů musí být obnovovací token uložen na bezpečném místě, protože může být později potřeba. Další informace o vyžádání přístupových a obnovovacích tokenů naleznete v následujících průvodcích:
Když vyprší platnost přístupového tokenu
Přístupový token má datum vypršení platnosti, které závisí na hodnotě expires_in . Přístupový token, jehož platnost vypršela, lze obnovit pomocí obnovovacího tokenu, ale naše klientské knihovny to dělají automaticky.
Není-li uvedeno jinak, je obsah této stránky licencován v rámci licence Creative Commons Attribution 3.0 a ukázky kódu jsou licencovány v rámci licence Apache 2.0. Podrobnosti viz naše. Java je registrovaná ochranná známka společnosti Oracle a/nebo jejích přidružených společností.
Aktualizováno 24. září 2018
V roce 2010 byly zahájeny práce na kompletně nová verze Protokol OAuth 2.0, který nebude zpětně kompatibilní s OAuth 1.0. V říjnu 2012 byl rámec OAuth 2.0 publikován v RFC 6749 a použití nosiče tokenů v RFC 6750, oba standardy sledují požadavky na komentáře. Další RFC se stále vyvíjejí.
Pro vytvoření OAuth 2.0 bylo několik předpokladů. Za prvé, OAuth je zcela netriviální pro použití na straně klienta. Jedním z našich cílů při vývoji nového OAuth je zjednodušit vývoj klientské aplikace. Za druhé, navzdory implementaci tří metod (nazývaných toky) uvedených ve standardu pro získání tokenu (jedinečného identifikátoru) pro autorizaci: pro webové aplikace, desktopové klienty a mobilní klienti, ve skutečnosti jsou všechny tři metody sloučeny do jedné. A za třetí, protokol se ukázal jako špatně škálovatelný. Plánuje se přidat:
- 6 nových streamů.
- Tok tvrzení – klient odešle tvrzení, jako je tvrzení SAML, na autorizační server výměnou za token.
- Token na doručitele.
- stávající metoda
- Zjednodušený podpis.
Stojí za zmínku, že ačkoli standard OAuth 2.0 ještě nebyl schválen, některé služby jej již používají. Například Graf Sociální API Facebook podporuje pouze OAuth 2.0.
Rozdíl mezi OAuth a OpenID
Existuje mylná představa, že OAuth je rozšířením protokolu OpenID. Ve skutečnosti to není pravda. Ačkoli OpenID a OAuth mají mnoho podobností, OAuth je samostatný protokol, který nijak nesouvisí s OpenID.
Časové razítko a Nonce
Aby se zabránilo hrozbě žádostí opětovné použití OAuth používá nonce a časové razítko. Výraz "nonce" znamená, že daný čas použitý jednou a je to jedinečný náhodný řetězec písmen a čísel, který má jednoznačně identifikovat každý podepsaný požadavek. Mít jedinečný identifikátor U každého požadavku bude poskytovatel služby moci zabránit žádostem o opětovné použití. To znamená, že klient generuje jedinečný řetězec pro každý požadavek, který odešle na server, a server sleduje všechny použité nonce, aby zabránil jejich druhému použití.
Použití nonce může být pro server velmi nákladné, protože vyžaduje trvalé uložení všech přijatých nonců. Pro snazší implementaci přidává OAuth ke každému požadavku časové razítko, což serveru umožňuje uložit nonce pouze po omezenou dobu. Když požadavek dorazí s časovým razítkem, které je dřívější než uložený čas, je odmítnut, protože server již od tohoto času nemá žádnou hodnotu.
Pověření a tokeny
OAuth používá tři typy oprávnění: přihlašovací údaje klienta (spotřebitel klíč a tajné nebo klientské přihlašovací údaje), dočasné přihlašovací údaje (token požadavku a tajné nebo dočasné přihlašovací údaje) a tokeny (přístupový token a tajné nebo tokenové přihlašovací údaje).
Přihlašovací údaje klienta se používají k ověření klienta. To umožňuje serveru shromažďovat informace o klientech. Pomocí svých služeb server nabízí některým klientům speciální zpracování, jako je throttling volný přístup nebo poskytnout vlastníkovi zdroje další podrobné informace o klientech, kteří se snaží získat přístup k jejich chráněným zdrojům. V některých případech nemusí být přihlašovací údaje klienta bezpečné a lze je použít pouze pro informační účely, například v desktopových aplikacích.
Token se používá místo jména a hesla vlastníka zdroje. Vlastník zdroje nesdílí své přihlašovací údaje s klientem, ale spíše autorizuje server, aby vydal klientovi token – speciální třídu přihlašovacích údajů, která představuje udělení přístupu. Klient používá token pro přístup k chráněnému zdroji, aniž by znal heslo vlastníka zdroje.
Token se skládá z identifikátoru, obvykle (ale ne vždy) náhodného souboru písmen a čísel, který je jedinečný a těžko uhodnutelný, a klíče k ochraně tokenu před použitím neoprávněnými osobami. Token má omezený rozsah a trvání a může být kdykoli odvolán vlastníkem zdroje, aniž by to ovlivnilo ostatní tokeny vydané jiným klientům.
Proces Autorizace OAuth také používá sadu dočasných pověření, která se používají k určení požadavku na autorizaci. Aby bylo možné vyhovět různým typům klientů (web, počítač, mobilní zařízení atd.), nabízejí dočasné přihlašovací údaje větší flexibilitu a zabezpečení.
Jak funguje OAuth
Jak funguje protokol OAuth
Vysvětleme si fungování protokolu OAuth na příkladu. Řekněme, že uživatel (vlastník zdroje) chce vytisknout své fotografie (zdroje) nahrané na server „photos.example.net“ (server) pomocí tiskové služby „printer.example.net“ (klient).
- Klient pomocí protokolu HTTPS odešle na server požadavek, který obsahuje identifikátor klienta, časové razítko, adresu zpětného volání, na kterou má být token vrácen, typ použitého digitálního podpisu a samotný podpis.
- Server potvrdí požadavek a odpoví klientovi přístupovým tokenem a částí sdíleného tajemství.
- Klient přenese token vlastníkovi zdroje (uživateli) a přesměruje jej na server k autorizaci.
- Server poté, co od uživatele obdržel token, požádá jej o jeho přihlašovací jméno a heslo, a pokud je autentizace úspěšná, požádá uživatele o potvrzení přístupu klienta ke zdrojům (autorizaci), načež je uživatel serverem přesměrován na klienta.
- Klient předá serveru prostřednictvím TLS token a požádá o přístup ke zdrojům.
- Server požadavek potvrdí a odpoví klientovi novým přístupovým tokenem.
- Pomocí nového tokenu klient kontaktuje server pro prostředky.
- Server potvrdí požadavek a poskytne zdroje.
Tento příklad popisuje tok s autorizačním kódem (tok autorizačního kódu). Kromě toho standard OAuth 2.0 popisuje následující toky:
- Implicitní tok grantů
- Obnovení toku přístupových tokenů s vypršenou platností
- Tok pověření hesla vlastníka zdroje
- Tok přihlašovacích údajů klienta
OAuth podporuje dvě metody ověřování zpráv od klienta: HMAC -SHA1 a RSA -SHA1 . Je možné posílat zprávy bez podpisu, pak je v poli typu podpisu uvedeno „prostý text“. V tomto případě však podle specifikace musí být spojení mezi klientem a serverem navázáno přes SSL nebo TLS.
Portály využívající OAuth
Diskuse
V červenci 2012 Eran Hammer, současný editor standardu OAuth 2.0, oznámil svou rezignaci po třech letech práce na novém standardu a požádal o odstranění jeho jména ze specifikací. O svých názorech hovořil na svém webu. Později přednesl prezentaci. .
Poznámky
Viz také
Odkazy
Nadace Wikimedia.
- 2010.
- Otevření vestavěného prohlížeče s přihlašovací stránkou
- Uživatel je požádán o potvrzení udělení práv. Pokud uživatel souhlasí, prohlížeč je přesměrován na stub stránku ve fragmentu (za #), jejíž URL je přidána
- přístupový token Pokud uživatel souhlasí, prohlížeč je přesměrován na stub stránku ve fragmentu (za #), jejíž URL je přidána Aplikace zachytí přesměrování a přijme
Příklad
Otevřete prohlížeč s přihlašovací stránkou:> GET /oauth/authorize?response_type=token&client_id=464119 HTTP/1.1 > Hostitel: connect.mail.ru
Poté, co uživatel udělí oprávnění, dojde k přesměrování na standardní stub stránku, pro Mail.Ru to je connect.mail.ru/oauth/success.html:
< HTTP/1.1 302 Found
< Location: http://connect.mail.ru/oauth/success.html#access_token=FJQbwq9&token_type=bearer&
expires_in=86400&refresh_token=yaeFa0gu
Aplikace musí zachytit poslední přesměrování a získat z adresy přístupový_token a používat jej pro přístup k chráněným zdrojům.
Autorizace pomocí přihlašovacího jména a hesla
Autorizace pomocí přihlašovacího jména a hesla je jednoduchý POST požadavek, v důsledku čehož se vrací Pokud uživatel souhlasí, prohlížeč je přesměrován na stub stránku ve fragmentu (za #), jejíž URL je přidána. Toto schéma není nic nového, ale je zahrnuto do standardu pro obecnost a doporučuje se používat pouze v případě, že nejsou k dispozici jiné možnosti autorizace.Příklad
> POST /oauth/token HTTP/1.1 > Hostitel: connect.mail.ru > Typ obsahu: application/x-www-form-urlencoded > > grant_type=password&client_id=31337&client_secret=deadbeef&username=api@corp.mail.ru& password= qwerty< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"SlAV32hkKG", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"8xLOxBtZp8", < }Popis ve specifikaci
Obnovení předchozí autorizace
Obvykle, Pokud uživatel souhlasí, prohlížeč je přesměrován na stub stránku ve fragmentu (za #), jejíž URL je přidána má omezenou trvanlivost. To může být užitečné například při přenosu otevřené kanály. Aby nedošlo k nucení uživatele k přihlášení po vypršení platnosti Pokud uživatel souhlasí, prohlížeč je přesměrován na stub stránku ve fragmentu (za #), jejíž URL je přidána"a ve všech výše uvedených možnostech navíc k Pokud uživatel souhlasí, prohlížeč je přesměrován na stub stránku ve fragmentu (za #), jejíž URL je přidána"možná se zase vrať obnovovací token. Můžete jej použít k získání Pokud uživatel souhlasí, prohlížeč je přesměrován na stub stránku ve fragmentu (za #), jejíž URL je přidána pomocí HTTP požadavku, podobně jako při autorizaci pomocí přihlašovacího jména a hesla.Příklad
> POST /oauth/token HTTP/1.1 > Hostitel: connect.mail.ru > Typ obsahu: application/x-www-form-urlencoded > > grant_type=refresh_token&client_id=31337&client_secret=deadbeef&refresh_token=8xLOxBtZp8< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"Uu8oor1i", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"ohWo1ohr", < }- 2010.
- Otevření vestavěného prohlížeče s přihlašovací stránkou
- Uživatel je požádán o potvrzení udělení práv. Pokud uživatel souhlasí, prohlížeč je přesměrován na stub stránku ve fragmentu (za #), jejíž URL je přidána
- přístupový token Pokud uživatel souhlasí, prohlížeč je přesměrován na stub stránku ve fragmentu (za #), jejíž URL je přidána Aplikace zachytí přesměrování a přijme
Příklad
Otevřete prohlížeč s přihlašovací stránkou:> GET /oauth/authorize?response_type=token&client_id=464119 HTTP/1.1 > Hostitel: connect.mail.ru
Poté, co uživatel udělí oprávnění, dojde k přesměrování na standardní stub stránku, pro Mail.Ru to je connect.mail.ru/oauth/success.html:
< HTTP/1.1 302 Found
< Location: http://connect.mail.ru/oauth/success.html#access_token=FJQbwq9&token_type=bearer&
expires_in=86400&refresh_token=yaeFa0gu
Aplikace musí zachytit poslední přesměrování a získat z adresy přístupový_token a používat jej pro přístup k chráněným zdrojům.
Autorizace pomocí přihlašovacího jména a hesla
Autorizace pomocí přihlašovacího jména a hesla je jednoduchý POST požadavek, v důsledku čehož se vrací Pokud uživatel souhlasí, prohlížeč je přesměrován na stub stránku ve fragmentu (za #), jejíž URL je přidána. Toto schéma není nic nového, ale je zahrnuto do standardu pro obecnost a doporučuje se používat pouze v případě, že nejsou k dispozici jiné možnosti autorizace.Příklad
> POST /oauth/token HTTP/1.1 > Hostitel: connect.mail.ru > Typ obsahu: application/x-www-form-urlencoded > > grant_type=password&client_id=31337&client_secret=deadbeef&username=api@corp.mail.ru& password= qwerty< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"SlAV32hkKG", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"8xLOxBtZp8", < }Popis ve specifikaci