REST API Security Guide

znalost toho, jak zabezpečit REST API je stejně důležité jako psát API sám. Většinou REST API jsou HTTP protokol založený, a každý uživatel, který má připojení k internetu přístup k nim, a tak může Špatné uživatele stejně. Pro ochranu podnikání je velmi důležité psát zabezpečená rozhraní API.

než začneme zabezpečovat RESTful API, pojďme pochopit, jaké jsou naše možnosti jako vývojáři? Co bude vhodné pro naše použitípřípad?

Table of Contents1. Authentication vs. Authorization2. Four Ways to Secure RESTful Web Services- BASIC Authentication- DIGEST Authentication- Client CERT Authentication- OAUTH2 API Keys3. RESTful Web Services Security Implementations- Using SecurityContext- Using Annotations4. Best Practices

rozdíl mezi autentizací vs. autorizace

před skokem do hlavní diskuse si ujasněme fakta o tom, co je autentizace a co je autorizace.

v prosté jednoduché angličtině je autentizace procesem zjištění, že „je uživatel opravdu někdo, kdo tvrdí, že je“. Z technického hlediska, je proces přihlášení do systému prostřednictvím uživatelského jména/hesla nebo jakékoli podobné mechanismy, např. otisk prstu skenování, token zabezpečení, bezpečnostní otázky nebo SAML token obdržel od SSO přihlášení. Musí existovat něco, co může identifikovat uživatele od ostatních.

Jakmile uživatel je uvnitř systému, povolení se týká pravidel, které určují, „co uživatel může dělat“ a co není např. běžný uživatel může odeslat zprávu na jakékoli veřejné skupině, ale pouze uživatelé s editor roli bude schopen odstranit něco. Povolení je často viděn jako oba úvodní nastavení oprávnění správce systému a ověření souhlasu hodnot, které již byly nastaveny, když uživatel dostává přístup do systému.

když zabezpečujeme webové služby RESTful, musíme se postarat o oba faktory. Tyto dva pojmy jsou zcela ortogonální a nezávislé, ale oba jsou ústředním bodem návrhu zabezpečení a neschopnost získat jeden správný zvyšuje šance na kompromitovaný systém..

čtyři způsoby, jak zabezpečit RESTful webové služby

existuje několik způsobů, jak zabezpečit RESTful API v Javě. Pojďme projít 4 nejoblíbenější volby:

2.1. Základní autentizace

je to nejjednodušší ze všech technik a pravděpodobně nejpoužívanější. Používáte přihlašovací / heslo formuláře-je to jen základní ověřování. Zadáte své uživatelské jméno a heslo a odešlete formulář na server, a aplikace vás identifikuje jako uživatele-máte povoleno používat systém-jinak dostanete chybu.

hlavním problémem této implementace zabezpečení je, že pověření jsou šířena prostým způsobem z klienta na server. Pověření jsou pouze kódovány s Base64 v tranzitu, ale nejsou šifrovány nebo hash v žádném případě. Tímto způsobem mohl každý sniffer číst odeslané balíčky po síti.

HTTPS je proto obvykle přednost, nebo použít ve spojení s Základní Ověřování, který dělá rozhovor s webového serveru výhradně šifrované. Nejlepší na tom je, že nikdo nemůže ani odhadnout zvenčí, že základní Auth probíhá.

2.2. DIGEST Authentication

tato autentizační metoda využívá hashovací algoritmy k šifrování hesla (nazývaného hash hesla) zadaného uživatelem před odesláním na server. To je samozřejmě mnohem bezpečnější než základní metoda ověřování, při které heslo uživatele cestuje prostým textem, který může snadno přečíst kdokoli, kdo jej zachytí.

Přečtěte si Více: Vytvářet Šifrované Hesla

Existuje mnoho takových hashovacích algoritmů v jazyce java také, což může být opravdu efektivní pro zabezpečení hesla jako MD5, SHA, BCrypt, SCrypt a PBKDF2WithHmacSHA1 algoritmy.

nezapomeňte, že jakmile je toto heslo vygenerováno a uloženo v databázi, nemůžete jej převést zpět na původní heslo. Pokaždé, když se uživatel přihlásí do aplikace, musíte znovu obnovit hash hesla a shodovat se s hash uloženým v databázi. Takže pokud uživatel zapomněl své heslo, budete mu muset poslat dočasné heslo a požádat ho, aby ho změnil svým novým heslem. No, dnes je to běžný trend.

2.3. Ověření klienta Cert

Jedná se o mechanismus, ve kterém je mezi serverem a klientem uzavřena dohoda o důvěře prostřednictvím certifikátů. Musí být podepsány agenturou zřízenou, aby bylo zajištěno, že certifikát předložený k ověření je legitimní, který je známý jako CA.

pomocí této techniky, když se klient pokusí o přístup k chráněnému prostředku, namísto poskytnutí uživatelského jména nebo hesla předloží certifikát serveru. Certifikát obsahuje kromě jedinečného páru soukromých a veřejných klíčů také informace o uživateli pro autentizaci včetně bezpečnostních pověření. Server poté určí, zda je uživatel prostřednictvím CA legitimní. Kromě toho musí ověřit, zda má uživatel přístup ke zdroji. Tento mechanismus musí používat protokol HTTPS jako komunikační protokol, protože nemáme zabezpečený kanál, který by zabránil komukoli ukrást identitu Klienta.

kompletní návod pro generování bezpečnostního certifikátu najdete v oficiálních dokumentech oracle.

2.4. OAuth2 API klíče

pokud jste někdy vyvinuli aplikace, které interagují s jinými aplikacemi přes cloud, např. Facebook integrace nebo twitter ověřování atd. pak jste to již použili. Vyžadují, abyste poskytli klíč API a tajemství API, aby vás správně identifikovali. Tyto API klíč a tajemství jsou některé náhodné kódované řetězec, který je nemožné odhadnout.

pochopit, jak to funguje, předpokládejme, že používáte Flickr (sdílení fotografií) a chtít některé z vašich fotografií pomocí REST API. Sestavíte požadavek, jak je zdokumentováno v dokumentech Flickr, a poté jej odešlete.

poté, když obdrží požadavek, Flickr ověřuje uživatele čtením informací z klíče API pomocí tajného klíče, který patří uživateli. Jakmile jsou tato ověření úspěšná, server doručí odpověď klientovi. Tím pádem, získáme odpověď se všemi fotografiemi, které byly nedávno zveřejněny v rámci Flickru.

jak si všimnete, tímto způsobem můžete snadno vytvářet aplikace pomocí API poskytovatele. Poskytovatel vám také umožní autentizaci a přístup k veřejným informacím.

Pokud někdo začne nerespektování dohod, např. odesílání nevyžádané provoz nebo jakékoli porušení zásad poskytovatel stáhne API klíč a zabránit zneužití jeho Api.

implementace zabezpečení REST API

kromě výše uvedených konceptů budete obvykle muset zabezpečit své RESTful API ve vaší společnosti pomocí níže uvedených metod.

3.1. Jax-RS SecurityContext instance

rozhraní javax.ws.rs.core.SecurityContext poskytuje přístup k informacím týkajícím se zabezpečení pro požadavek a je velmi podobné javax.servlet.http.HttpServletRequest.

přístup k SecurityContext vstřikováním instanci do pole třída, setter metoda, nebo metoda parametr pomocí javax.ws.rs.core.Context anotace např. v níže kód se používá ke kontrole oprávnění pro uživatele.

3.2. JAR-R poznámky k metodě úroveň oprávnění

Tato technika je široce používán v podnikových aplikací a používá se k ověření role a responsibities ověřený používá – pro jakékoliv určité operace. JAX-RS pro tento účel poskytuje níže uvedené anotace.

  • @PermitAll
  • @DenyAll
  • @RolesAllowed

příklad použití anotace může být:

Čtěte Více : Příklad autentizace a autorizace Jax-RS

osvědčené postupy zabezpečení REST API

poznamenejme si některé důležité body při navrhování zabezpečení Vašich RESTful webových služeb.

  1. používejte pouze protokol HTTPS, aby celá vaše komunikace byla vždy šifrována.
  2. Nikdy neposílejte přihlašovací údaje auth nebo API klíče jako param dotazu. Objevují se v URL a lze je snadno zaznamenat nebo sledovat.
  3. používejte vždy nejtěžší úroveň šifrování. Pomůže to mít větší důvěru.
  4. u zdrojů vystavených RESTful web services je důležité zajistit, aby jakýkoli požadavek PUT, POST a DELETE byl chráněn před paděláním žádosti o Cross Site.
  5. vždy ověřte vstupní data, jakmile jsou přijata v serverové metodě. Používejte pouze primitivní data jako vstupní parametr co nejvíce.
  6. Spolehněte se na ověřovací funkce poskytované rámcem, protože jsou již testovány velkou komunitou.

dejte mi vědět své myšlenky a zkušenosti o tom, jak zabezpečit RESTful webové služby ve vaší organizaci.

Šťastné Učení !!

byl tento příspěvek užitečný?

dejte nám vědět, pokud se vám příspěvek líbil. Jedině tak se můžeme zlepšit.
Ano
Ne

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

More: