Login v JavaEE aplikacích

dreamer

Login v JavaEE aplikacích
« kdy: 08. 08. 2013, 09:46:31 »
Ahoj

učím se Java EE podle knížky Beginning Java EE 6 with GlassFish 3, kde je super vysvětlené zabezpečení business logic EJB pomocí definování roles a principals, ale nějak je tam plně opomenuté, jak v web tier provedu ověření uživatele a nastavení jeho principal? Rád bych prostě nějaký formulář v JSF typu nick/helo -> Odeslat a ověřit podle údajů v DB. Samozřejmě mě jako možnost přihlášení napadlo i něco jako v PHP, prostě nacpat něco do session proměnné ale určitě to musí jít i sofistikovaněji. Poradíte prosím, případně nasměrujete?

Díky
« Poslední změna: 08. 08. 2013, 09:55:55 od Petr Krčmář »


Franta <xkucf03/>

Re:Login v JavaEE aplikacích
« Odpověď #1 kdy: 08. 08. 2013, 10:22:07 »
Divil bych se, kdyby to v té knížce nebylo.

Běžně se to nastavuje ve web.xml, kde určíš část stránek jako chráněnou, řekneš, kde se nachází přihlašovací formulář a jaký realm se má používat – o všechno se pak postará aplikační server. Viz třeba můj web pro nekuřáky: https://hg.frantovo.cz/nekurak.net/file/bebec432330a/java/nekurak.net-web/web/WEB-INF/web.xml#l120 (dole login-config).

dreamer

Re:Login v JavaEE aplikacích
« Odpověď #2 kdy: 08. 08. 2013, 22:45:13 »
Díky za odpověď, ještě bych měl jednu otázku na kterou jsem nikde nenašel odpověď. Pokud použiju form-based authentication s vlastními JSF formuláři, jak si vynutím na AS aby formuláře zobrazil zapezpečeně přes HTTPS? Díky

Franta <xkucf03/>

Re:Login v JavaEE aplikacích
« Odpověď #3 kdy: 11. 08. 2013, 22:27:09 »
Můžeš použít direktivu "transport-guarantee", kterou lze vynutit integritu dat (INTEGRAL – že je nikdo nezmění – kontrolní součty) nebo i důvěrnost (CONFIDENTIAL – že si je nikdo nepovolaný nepřečte), ale:

1) Často se používají reverzní proxy a šifrování se dělá až na nich – aplikační server SSL neřeší a má o to méně práce. Pak často ani AS neví, zda se šifruje nebo kam by měl uživatele přesměrovat. Což sice jde zařídit, ale:

2) Šifrovat jen část webu nedává valný smysl. Šmíráci a zločinci jsou dnes na každém kroku je zbytečné jim usnadňovat práci. Přes nešifrované části ti budou unikat cookies nebo informace o tom, co ten uživatel dělá… HTTPS by měla být samozřejmost a doporučuji použít šifrování pro úplně vše.

Když už nešifrované spojení, tak jen selektivně pro velké (šifrování by brzdilo) veřejné (nic tajného se nevyzradí) soubory, které vyšoupneš někam bokem (pak stejně AS bude mimo hru, protože ho tím nebudeš zatěžovat a budeš tyhle soubory servírovat apachem, nginxem atd.). Ale pak musíš zajistit, aby se na straně klienta vždy zkontroloval hash (např. SHA-512) stažených dat – HTTP samo o sobě nezaručuje integritu a útočník (MITM) by mohl uživateli podstrčit data (např. zavirovaný instalátor tvého programu nebo dětské porno místo normálního filmu).