Oauth vk com co to je. OAuth VKontakte: použití pro osobní zisk. Když vyprší platnost přístupového tokenu
Vítejte u druhého článku o MVC a PHP. V něm probereme některé principy, kterými byste se měli řídit při používání architektury MVC.
Směrování a adresy URL
Implementace MVC s pomocí PHP Na internetu to může být trochu složitější. První problém souvisí se směrováním URL. Směrování URL je jedním z aspektů, které nebyly brány v úvahu při vývoji MVC.
Jaké možnosti tedy máme k vyřešení problému se směrováním URL? Jedním z nich je předdefinování všech URL, které webová aplikace potřebuje. A pak jejich uložením do úložiště spolu s odpovídajícími daty, které šablony Models, Views a Controller načítají pro každou stránku nebo sekci.
Systém poté obdrží URL požadovanou uživatelem a načte komponenty přiřazené této stránce. Toto je funkční řešení, pokud vytváříte obchodní web nebo statický web, který nepracuje s dynamickými adresami URL. Například:
array("model" => "AboutModel", "view" => "AboutView", "controller" => "AboutController"), "portfolio" => array("model" => "PortfolioModel", "view" = > "PortfolioView", "controller" => "PortfolioController"));
foreach($data jako $key => $components)( if ($page == $key) ( $model = $components["model"]; $view = $components["view"]; $controller = $components ["ovladac"] ) ) if (isset($model)) ( $m = novy $model(); $c = novy $ovladac($model); $v = novy $pohled($model); echo $v->output() ) )
Adresy URL budou vypadat takto:
example.com/index.php?page=about
example.com/index.php?page=portfolio
Příklad MVC PHP načte konkrétní sadu "Model", "View" a "Controller" pro požadovanou stránku. Pokud je parametr adresy URL stránky „o“, zobrazí se stránka Informace. Pokud je „portfolio“, zobrazí se stránka Portfolio.
Můžete vystavit definice tříd Model, View a Controller a umožnit adresám URL definovat jejich parametry. V příkladu statického směrování získáváme ID třídy z pole, které obsahuje směrovací data pocházející z trvalého úložiště. Nahrazení pole prvky změní statické směrování na dynamické směrování.
Klíč pro každý přidružený prvek vložíme do pole s proměnnou URL, ale interakce s odpovídajícími třídami jsou již předdefinované; nemohli jsme porovnat hodnoty každého klíče se statickým směrováním. Ale proč to nezkusíme udělat? Pro začátek bychom neměli tvrdě kódovat každou sekci systému.
Můžete vytvářet sekce nebo stránky vytvořením vztahů mezi modelem, pohledem a ovladačem. Například:
výstup(); )
Naše nová adresa URL bude vypadat takto:
example.com/index.php?controller=controllername;model=modelname&view=viewname&action=actionname
Aktuální proměnná URL sděluje systému, jakou funkci má volat v "Ovladač". Když tato funkce předá data do „Modelu“, odešle také část dat, která indikuje, který „View“ a „Controller“ by měl být načten.
Může to být proměnná adresy URL události, samostatná proměnná nebo data shromážděná správcem. Pamatujte, že "Controller" by nikdy neměl načítat data nebo je přímo předávat do "View"; měl by pracovat pouze s "Modelem" a uživatelským vstupem.
Oba přístupy mají svá pro a proti. Statické směrování je robustnější, rychlejší na implementaci a poskytuje vývojářům větší kontrolu nad systémem. Dynamické směrování umožňuje vytvořit efektivnější systém s větším potenciálem pro škálovatelnost a přenositelnost.
Avšak s dynamickým směrováním může „Controller“ přijímat více funkcí než se statickým směrováním. Dynamické směrování lze považovat za modifikaci tradiční architektury MVC. Pokud je však implementován správně a efektivně, může se „Controller“ stát důležitějším prvkem než u statického směrování.
Přidání předního ovladače umožní vašemu systému dynamicky načítat oddíly podle toho, co potřebujete.
DRY (Don’t Repeat Yourself) a vzory
Pro mě je jedním z hlavních argumentů ve prospěch použití MVC schopnost udělat celý systém co nejlépe organizovaný. Každý vývojář bude souhlasit s tím, že nejhorší pro každou aplikaci je opakování stejného kódu. Princip zachování jednoduchého kódu a opětovného použití komponent se nazývá filozofie SUCHÝ – Neopakujte se(neopakuj se).
Principy DRY říkají: „ Každá informace musí být v systému uvedena jednou, jednoznačně a srozumitelně". Cílem DRY je rozšířit a prozkoumat všechny možné způsoby dostupné vývojářům, aby byl systém co nejdynamičtější a optimalizovaný. DRY znamená, že pokud potřebujete napsat stejný kus kódu na mnoha místech, pak namísto opakování tohoto kódu vytvořte samostatnou metodu a použijte ji tam, kde je to nutné.
Tento přístup umožňuje optimalizaci systému a zahrnuje možnosti ukládání do mezipaměti, aby se zkrátila celková doba zpracování.
Správná implementace DRY je, když se změní jeden prvek systému, nesouvisející prvky se nezmění. To je důvod, proč je DRY tak důležité při vývoji pomocí vzoru MVC.
Šablony
Slovo „šablona“ může vyvolávat některé otázky pro ty, kteří dříve pracovali s webovými frameworky MVC, protože většina lidí přirovnává šablonu k „View“. Jak jsme diskutovali dříve, z pohledu tradiční architektury MVC to není správné.
V ideálním případě by pohled měl zpracovávat data poté, co je obdrží od modelu. Má tedy smysl uspořádat vše tak, aby komponenta View pouze vybrala šablonu a předala data do této šablony.
Data tak budou připravena k zobrazení pomocí struktury blokového kódu nebo pomocí echo , print . Hlavní věc, kterou je třeba si zapamatovat, je, že vaše data musí být připravena pro výstup prostřednictvím šablony. Pokud vaše šablona zpracovává data odlišně, s největší pravděpodobností je vaše architektura MVC nastavena nesprávně.
Zde je jednoduchý příklad toho, jak pohled načte šablonu a předá do ní data:
tstring = "Řetězec byl načten přes šablonu.";$this->template = "tpl/template.php";
))
controller = $controller;PHP MVC šablona prochází "Modelem", který může přiřadit šablonu podle toho, k čemu je každý konkrétní "View" určen. Tato metoda šablon vám umožňuje vytvářet efektivní a rozšiřitelné systémy tím, že poskytuje možnost oddělit back-end a front-end vývoj. To je hlavní účel MVC.
Závěr
MVC prošlo velkými změnami od doby, kdy bylo poprvé použito pro programování. Bylo a stále zůstává jedním z nejdiskutovanějších témat mezi vývojáři. Tato debata se stala ještě intenzivnější poté, co byl MVC použit pro vývoj PHP pro web.
Existuje mnoho způsobů, jak distribuovat škodlivý spam na VKontakte. Škůdci ale nespí, do hlavy jim přicházejí další a další zajímavé nápady. A ukázalo se, že je to velmi užitečné. Podvodníci se jej naučili používat k obcházení stránky s varováním o škodlivých stránkách.
A všechno to začalo, když se jednoho dne na mé zdi objevila následující zpráva:
Ze zvědavosti jsem následoval odkaz a skončil na jiném phishingovém webu. Ale samotný odkaz se mi zdál divný, vypadal jako (polovina znaků v ASCII):
vkontakte.ru/away.php? na=http%3A%2F%2FApi.vKontakte.Ru%2F%2Fo%2561u%2574%…
Tady začíná zábava...
Podívejme se na druhý odkaz po částech:Co znamenají jednotlivé parametry:
- client_id - ID aplikace, která vyžaduje autorizaci;
- redirect_uri - adresa, na kterou bude odeslán přístupový_token (přes přesměrování);
- displej - typ autorizačního okna (stránka, vyskakovací okno, dotyk a wap).
To je celý smysl obcházení černé listiny škodlivých stránek VKontakte. Zobrazí se pouze upozornění na přechod na api.vk.com. A v důsledku přechodu přejdeme přímo na phishingový web, který je na černé listině. Když budete následovat odkaz vkontakte.ru/away.php?to=vgostivk.dyndns**:
Jak se ukázalo, aplikace, která údajně vyžadovala autorizaci, visela na napadeném uživateli:
A samotná phishingová stránka byla navržena docela zajímavě. Design byl jako obvykle kontaktní a byl požádán o přihlášení. Přihlásil jsem se pomocí náhodného e-mailu a hesla a ten falešný jsem v pohodě spolkl. Co se stalo potom, bylo ještě zajímavější, na hlavní stránce se objevily zprávy od „Pavela Durova“:
Po kliknutí na tlačítko „Vytvořit osobní počítadlo“ následoval nádherný ukazatel průběhu. Poté jste byli požádáni, abyste uvedli své číslo a odeslali SMS:
Teoreticky by po úspěšné „aktivaci“ měl být přesměrován na stránku activ.php, ale nemohl jsem se tam dostat. Výňatky z JS skriptů phishingového webu:
...
if (stav požadavku == 200) (
// pokud je stav 200 (OK) - odešlete odpověď uživateli
if (req.responseText == "ok" ) (
//statusElem.innerHTML = "Všechno bzučí!";
get_activation();
}
if (req.responseText == "ne" ) (statusElem.innerHTML = "Neplatný aktivační kód";}
//statusElem.innerHTML = "Odpověď serveru: "+req.responseText;
...
funkce get_activation() (
document .location="activ.php" ;
}* Tento zdrojový kód byl zvýrazněn pomocí Zvýrazňovače zdrojového kódu.
Sečteno a podtrženo: Podvodníci používají protokol OAuth 2.0 k obcházení varování, získání hesla a e-mailu uživatele a dokonce k pokusu o podvod odeslání sms(s největší pravděpodobností pomocí systému předplatného).
- 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
- Aplikace zachytí přesměrování a přijme přístupový token z adresy stránky
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í přístupový token. 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, přístupový token 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 přístupový token"a ve všech výše uvedených možnostech navíc k přístupový token"možná se zase vrať obnovovací token. Můžete jej použít k získání přístupový token 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", < }Servisní tým Invola se staral o své zákazníky a implementoval přímé připojení k poště pomocí technologie OAuth 2.0.
V tomto článku vám řekneme, co to je, jak to funguje a jak to ovlivňuje bezpečnost uživatelských dat.
Vypustíme řadu technické body, přenášející podstatu technologie v jazyce, který je jednoduchý a srozumitelný pro běžné uživatele.
Běžní uživatelé služby vědí, jak to někdy bylo Je nepohodlné používat duplicitní e-mail, často mu zapomínají poslat další dopis. Obdrželi jsme dopisy, ve kterých nás žádali, abychom přezkoumali algoritmus pro přijímání faktur a komerčních faktur ve prospěch přímé spojení na poštu.
Po několika týdnech plodné práce programátora a bezpečnostního specialisty implementován autorizační algoritmus a teď je hlavní způsob připojení klientům obsluhovat.
Co je OAuth?
Mluvit suše technický jazyk, pak se jedná o autorizační protokol, který vám umožňuje vydat jednu službu (in v tomto případě Invola) práva pro přístup k uživatelským zdrojům na jiné službě (přístup k poště).
Uživatel má více důvodů důvěřovat aplikaci, protože si tím může být jistý neoprávněný přístup přístup k jeho osobním údajům není možný. Bez přihlašovacího jména a hesla uživatele, aplikace bude moci provádět pouze ty akce s daty které uživatel povolil a žádné další.
Zjednodušeně lze říci toto: služba Invola se připojí k vaší poště, aby mohla přijímat faktury a komerční nabídky, aniž byste vyžadovali přihlašovací jméno a heslo, ale požadovali právo na přístup. Pokud potvrdíte, aplikace získává přístup, dokud ji neodvolá sám uživatel, nebo dokud aplikace existuje a je aktivní.
V komunikaci mezi Involou a poštovní server je použit přístupový token (krok 4-5), jehož platnost automaticky vyprší po hodině a je aktualizována podle potřeby (automaticky, bez zásahu uživatele, software Invola).
Nyní si povíme něco o bezpečnosti a proč Autorizace OAuth je vhodnější než autentizace přihlášením/heslem.
Když jakékoli službě poskytnete přihlašovací jméno a heslo pro přístup k vašemu účtu (mail.ru, gmail.com), ve skutečnosti poskytujete heslo pro celý účet(takto se dostanete např. na disk, fotoalba a další osobní údaje).
Udělení přístupu přes OAuth ty sám vybrat, ke kterým zdrojům budete mít přístupúčet dáte přístup. To znamená, že uživatel sám řídí, ke kterým zdrojům je ochoten dát přístup. Podívejme se na příklad práv požadovaných při připojení k Invola:
"Zobrazení a správa pošty"-Pro automatický příjemúčty a CP,“ zobrazit adresu"-Pro příjem e-mailu krabice," zobrazit profil" – k získání uživatelského jména (vyžadováno ve fázi registrace).
Bohužel, ne všechny poštovní servery(včetně firemních) autorizace podpory technologií OAuth, zejména populární služba Yandex.Mail. Pokud je vaše pošta na Yandex, připojte se k naší službě v momentálně Můžete použít pouze své přihlašovací heslo.
Něco málo o bezpečnosti.
Velmi dobře chápeme, jak kritický je únik důvěrných dat nebo neoprávněný přístup k datům zákazníků pro podnikání, finanční transakce, osobní korespondence. Bezpečnost dat je jednou z hlavních priorit naší práce.
Přístupové tokeny, stejně jako hesla pro přístup k poště, jsou uloženy na zabezpečeném vyhrazeném databázovém serveru pomocí kryptografického schématu založeného na dynamických klíčích.
V důsledku toho stojí za zmínku, že naši zaměstnanci nemají za žádných okolností přístup k poštovním serverům a korespondenci našich uživatelů.
Veškerá komunikace mezi uživatelem a službou, jakož i mezi službou a poštovním serverem se provádí přes zabezpečený kanál SSL jinými slovy, všechna přenášená data v obou směrech jsou šifrována pomocí silného kryptografického algoritmu.
Pokud podnikáte a posíláte svým klientům hodně faktur a nabídek, pak náš systém prostě musíte vyzkoušet. Invola odesílá automatická upozornění pokud na faktuře nebyla žádná odpověď, a také sleduje reakce vašich zákazníků na faktury (drahé, dlouhodobě zásoby atd.). V důsledku toho získáte zvýšení podílu zaplacených účtů a také máte možnost shromažďovat statistiky o výkonu vašich manažerů, běžné důvody odmítnutí.
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.
- Krátkodobé tokeny s dlouhodobou autorizací.
- Rozdělení rolí.
Za zmínku stojí, že ačkoli standard OAuth 2.0 ještě nebyl schválen, některé služby jej již využí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 jde o 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í nonces 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 potvrdí požadavek 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.