s potěšením oznamujeme, že první milník rozšíření Spring Security Kerberos je nyní k dispozici ke stažení. Vydání je také k dispozici prostřednictvím úložiště Maven milestone na http://maven.springframework.org/milestone. S rozšířením Spring Security Kerberos jsou vaši uživatelé ověřeni proti vaší webové aplikaci pouhým otevřením adresy URL. Není třeba zadávat uživatelské jméno/heslo a není třeba instalovat další software.
než se pustím hlouběji do Kerberos, rád bych představil Spring Security Extensions, nový projekt Spring Extension věnovaný poskytování rozšiřujících modulů pro projekt core Spring Security. V současné době zde máme vyvinutá dvě rozšíření: integraci SAML2 a integraci Kerberos / SPNEGO. Každý modul bude mít svůj vlastní cyklus vydání, aby lidé mohli těžit z těchto rozšíření, jakmile budou připraveni, a nemuseli čekat na další jarní bezpečnostní vydání. Pokud máte nějaké nápady nebo dokonce nějaký kód pro další rozšíření, prosím, řekněte nám!
Kerberos / SPNEGO
v prvním milníku tohoto modulu vám poskytujeme řešení Kerberos/SPNEGO pro webové aplikace. Kerberos je standardizovaný síťový autentizační protokol, který je navržen tak, aby poskytoval silnou autentizaci pro aplikaci klient / server, jako jsou webové aplikace, kde je prohlížeč klientem. Je to také doporučený způsob ověřování uživatelů v síti Windows a nahrazuje zastaralý a relativně nezabezpečený NTLM. Kromě toho je široce používán v prostředích * NIX a existují implementace pro každou hlavní platformu. Tak, to je velmi pravděpodobné, že již máte Kerberos na místě a nyní můžete použít i ve své vlastní webové aplikace. To znamená, že váš uživatel právě zadá adresu URL a je automaticky ověřen pomocí svého uživatelského jména domény, například [email protected]. toto uživatelské jméno pak můžete zjistit pomocí Spring Security nebo dokonce s požadavkem.getRemoteUser(). Jak to funguje? Zde je stručný přehled:
prohlížeč odešle požadavek GET do vaší webové aplikace (1), která pak vrátí, že je vyžadováno ověření „vyjednat“ (2). Prohlížeč pak požádá Server Kerberos o získání tzv. servisního lístku (3). Prohlížeč poté odešle tento servisní lístek, který prokáže totožnost volajícího, a některé další věci do webové aplikace (5). Po ověření tiketu, na základě nějakého sdíleného tajemství mezi vaší webovou aplikací a serverem Kerberos, dostanete zpět uživatelské jméno.
aby to fungovalo, musí být každá webová aplikace zaregistrována na serveru Kerberos a musí být přiřazena služba prinicipal a sdílené tajemství. Pro webové aplikace musí být hlavní služba „HTTP / <full qualified domain name>@DOMAIN“. Například „HTTP/[email protected]“, pokud vaše aplikace běží web.springsource.com. poté je třeba exportovat pověření tohoto jistiny do souboru keytab (shared secret) a zpřístupnit jej vaší aplikaci. Každý systém založený na Kerberos bude fungovat tímto způsobem, ale vytvoření této služby principal a keytab se liší mezi systémy. Ukážu vám, jak to děláte s Microsoft Windows a MIT Kerberos, ale mělo by to fungovat i s dalšími implementacemi.
vytvoření služby principal s Microsoft Windows 2008 Server
ačkoli se to týká Microsoft Windows 2008 Server, mělo by to být velmi podobné v 2003 a dokonce 2000 Server. V ActiveDirectory stačí vytvořit běžného uživatele domény a poté mu přiřadit hlavní službu (SPN)a vytvořit keytab pomocí nástroje příkazového řádku. A nyní krok za krokem:
Vytvořte normálního uživatele, který se stane hlavním servisním pracovníkem. Uživatelské jméno a heslo nemá smysl pro Kerberos, ale měli byste samozřejmě zvolit užitečné jméno, jako http-web.springsource.com. jen se ujistěte, že deaktivujete možnost „Uživatel musí změnit heslo při příštím přihlášení „a Aktivovat“ heslo nikdy nevyprší“.
poté musíte použít nástroj příkazového řádku “ ktpass.exe“. Je již součástí systému Windows 2008 Server, v dřívějších verzích jej musíte nainstalovat sami. Jen se ujistěte, že používáte verzi, která odpovídá verzi serveru a také národní prostředí by se mělo shodovat. Tento nástroj přiřadí hlavní název služby (SPN) vašemu dříve vytvořenému uživateli a exportuje Uživatelský klíč do souboru keytab. Pokud je váš servisní ředitel „HTTP/[email protected]“ a váš uživatel je http-web.springsource.com, pak by váš příkaz ktpass měl vypadat takto:
ktpass /out http-web.keytab /mapuser /princ HTTP/ /pass *
ktpass vás vyzve k zadání hesla. Měli byste si vybrat nějaký bezpečný náhodný. Pokud nyní máte soubor http-web.keytab ve vašem adresáři, pak vše fungovalo dobře. Tento soubor je potřebný později ve vaší aplikaci, protože obsahuje sdílené tajemství k ověření vstupenek na služby.
vytvoření služby principal s MIT Kerberos
na * Nix systémech a také v Mac OS X, implementace MIT Kerberos je široce používán. S MIT Kerberos je to ještě jednodušší. Stačí otevřít konzolu kadmin a provést následující příkazy:
kadmin: addprinc -randkey HTTP/web.springsource.comkadmin: ktadd -k /http-web.keytab HTTP/web.springsource.com
pak byste měli mít soubor http-web.keytab pod kořenem. Tento soubor je později potřebný ve vaší aplikaci, protože obsahuje sdílené tajemství k ověření servisních lístků.
Konfigurace Zabezpečení pružiny
Za prvé, požadavky:
- Spring Security 3.0.0 M2
- SUN JRE / JDK 1.6.x
- Kerberos prostředí
- prohlížeč, který podporuje SPNEGO (Firefox, IE, Safari)
Chcete-li použít modul Kerberos v Spring Security, stačí deklarovat filtr, vstupní bod ověřování a poskytovatele ověřování. Zahrnuli jsme ukázkovou webovou aplikaci, kterou můžete použít jako výchozí bod. Musíte pouze nakonfigurovat hlavní název služby a umístit tam svůj generate keytab. Ukázková aplikace je zahrnuta ve výše uvedeném stažení.
pokud otevřete zabezpečení.xml soubor ukázkové aplikace, který je pod /src / main / webapp/WEB-INF, uvidíte základní konfiguraci zabezpečení pružiny, která používá nový modul Kerberos.
první dvě fazole (SpnegoEntryPoint a SpnegoAuthenticationProcessingFilter) jsou odpovědné za podání ruky a poskytovatel KerberosServiceAuthenticationProvider nakonec potvrdí servisní lístek. V současné době podporujeme pouze implementaci Kerberos / SPNEGO, která je součástí JRE/JDK společnosti SUN. Jak jste jen získat zpět uživatelské jméno z Kerberos, budete také potřebovat UserDetailsService načíst role a možná i některé další atributy uživatele. V tomto vzorku používáme pouze fiktivní implementaci, abychom usnadnili testování.
jak vidíte, vyplnili jsme již název služby a umístění keytabu. Změňte tyto hodnoty pro vaši potřebu a ujistěte se, že dříve vygenerovaný keytab je k dispozici v tomto umístění.
Nyní spusťte server a pokuste se o ověření SPNEGO. V prohlížeči byste měli vidět své celé uživatelské jméno domény. Ve vašem kódu můžete načíst uživatelské jméno s normálními třídami zabezpečení na jaře nebo dokonce se standardním požadavkem na volání Java servlet.getRemoteUser(). Pokud to nefunguje (možná vidíte prázdnou stránku), zkontrolujte tyto věci:
- zkontrolujte soubor protokolu
- ujistěte se, že ve své adrese URL používáte úplný kvalifikovaný název domény (nikoli IP adresu a ne krátký název).
- pokud používáte Internet Explorer: zapněte „integrované ověřování systému Windows“ a ujistěte se, že doména (v našem případě web.springsource.com) je uveden v sekci lokální intranetové stránky IE.
- pokud používáte Firefox: podívejte se zde.
- pokud používáte klienta Windows: Klient a Server musí být na různých počítačích, protože jinak systém Windows použije NTLM místo Kerberos.
- zkontrolujte, zda je čas synchronizován na všech zúčastněných strojích.
- pokud používáte Microsoft AD, najdete zde další nápovědu: http://msdn.microsoft.com/en-us/library/ms995329.aspx
kromě toho může být nastavení správného prostředí Kerberos komplikované a je důležité si to uvědomit dříve, než začnete používat rozšíření Spring Security Kerberos. Většina problémů, se kterými se při konzultaci setkáváme, jsou problémy s prostředím Kerberos, nikoli se samotnou aplikací.
pokud nechcete používat rozšíření Spring Security Kerberos ve svém vlastním projektu Maven, musíte do svého pom přidat úložiště Spring Milestone.datum. Mělo by to vypadat takto:
a samozřejmě závislost:
stále je třeba udělat nějakou práci, například také poskytnout Kerberos pro klienty Java a nejen pro server, ale doufáme, že vyzkoušíte toto milníkové vydání a poskytnete nějakou zpětnou vazbu. Komunitní fórum je nejlepším místem pro kladení otázek nebo zahájení diskusí o nových funkcích. Případně, pokud zjistíte, že něco není v pořádku, můžete vznést problém Jira.