Archiwa tagów: uwierzytelnianie

Co zrobić, by Git wciąż nie pytał o hasło?

Jakiś czas temu przerzuciłem się z prawie wszystkimi swoimi repozytoriami na Git‚a. O przewagach Git’a nad SVN‚em można mówić wiele, jest też jednak kilka drobnych bolączek, z którymi SVN radził sobie świetnie, a Git wciąż nie daje sobie z nimi rady. Dziś będzie krótko o jednej z nich.

Git’a używam głównie na Windowsie (msysgit). Czasem pod konsolą, jednak głównie posiłkuję się TortoiseGit‚em – wcześniej pracowałem dużo na TortoiseSVN’ie, więc górę wzięły przyzwyczajenia :) Z repozytoriami Git’a łączę się głównie przez protokół http/https, gdyż bawienie się certyfikatami ssh na Windowsie do najprzyjemniejszych nie należy – kilka razy próbowałem, zawsze był jakiś problem. Natomiast przy jakichkolwiek próbach połączenia się przez http Git za każdym razem pytał mnie o login i hasło do repozytorium. Bez jakiejkolwiek możliwości zapamiętania wprowadzonych raz danych.

Rozwiązaniem bolączki okazała się aplikacja git-credential-winstore, wpinająca się w API uwierzytelniania Git’a i wykorzystująca poświadczenia systemu Windows. Po jej zainstalowaniu przy próbie połączenia się z repozytorium, wyświetlone zostało systemowe okno uwierzytelniania, oczywiście z opcją zapamiętania poświadczeń. Wprowadzonymi poświadczeniami możemy dodatkowo zarządzać z poziomu systemu: Panel sterowania\Wszystkie elementy Panelu sterowania\Menedżer poświadczeń.

Jeśli masz więc dość ciągłego pytania Git’a o login i hasło do Twojego repozytorium, zainstaluj git-credentials-winstore. Gdybyś napotkał na problemy z instalacją, pobierz plik instalacyjny i uruchom go z uprawnieniami administratora.

Apache Shiro – uwierzytelnić lepiej?

shiro-logo.jpg

Jakiś czas temu opisywałem, jak szybko zaimplementować uwierzytelnianie w aplikacji GWT przy pomocy JAAS’a. Wtedy byłem trochę zafascynowany tym ostatnim i nie dostrzegałem wielu jego wad. Prosty moduł uwierzytelniania (mniej więcej taki, jaki wtedy stworzyliśmy) nie przysparza jeszcze większych trudności, jednak każde dodatkowe wymagania sprawiły, że JAAS coraz bardziej zaczął mnie zniechęcać. Nie twierdzę, że jest zły, tylko jego silna integracja z mechanizmami serwerów aplikacji sprawia, że aplikacja staje się mało przenaszalna i praktycznie przed każdym wdrożeniem na inny serwer moduł logowania trzeba implementować od nowa. Najgorsze w tym wszystkim jest to, że niektóre serwery udostępniają łatwe i przyjazne API do rozszerzania funkcjonalności uwierzytelniania, a inne z kolei utrudniają bądź wręcz to uniemożliwiają. Jeśli wiemy, że nasza aplikacja od początku do końca będzie współpracować z jednym tylko serwerem – problem znika, nie mniej i tak się namęczymy z implementacją kilku rzeczy.

Użerając się wciąż z JAAS’em w końcu postanowiłem spróbować czegoś innego. Padło na Apache Shiro – framework ułatwiający implementację uwierzytelniania, autoryzacji, szyfrowania i zarządzania sesjami w aplikacjach Java. Shiro wywodzi się ze starej biblioteki JSecurity i obecnie jest aktywnie rozwijane przez wielu deweloperów. Może być użyte w zwykłych aplikacjach Java oraz aplikacjach webowych, a mocna modularyzacja kodu pozwala na łatwe podstawianie swoich implementacji do tego co potrzebujemy. Przy okazji zawiera też wiele podstawowych metod uwierzytelniania, z których można skorzystać praktycznie od razu. Dodatkowo jeśli nasza aplikacja musi obsługiwać mechanizmy serwerowe, w Shiro można napisać własną implementację modułu logowania JAAS.

Czytaj więcej »

Implementacja weryfikacji obrazkowej CAPTCHA w GWT i JAAS

Istotnym problemem stron internetowych są nieproszone boty, które często uprzykrzają życie nie tylko administratorom serwisu, ale też użytkownikom, którzy chcieliby mieć dostęp do treści jak najwyższej jakości. Nic przecież tak nie drażni jak mnogość bezsensowych komentarzy z reklamami przy wpisie, dla którego np. toczyła się ciekawa dyskusja. Od lat podejmuje się próby rozróżnienia użytkownika będącego po drugiej stronie i stwierdzenia, czy mamy do czynienia z człowiekiem czy komputerem. Jednym ze sposobów jest zastosowanie CAPTCHA. Czy jest to sposób w pełni skuteczny? Jak się domyślasz, bądź wiesz – nie, jednak z pewnością eliminuje zdecydowaną większość mało zaawansowanych botów. Ważne jest też, aby CAPTCHA nie była zbytnim utrudnieniem dla właściwego użytkownika, bo nic tak nie irytuje, jak kilkukrotne odświeżanie obrazka, aby w końcu trafić na ten w miarę czytelny.

W niniejszym wpisie nie będę rozwodził się na temat skuteczności CAPTCHA, jak i przekonywał do używania tego typu zabezpieczenia lub nie. Nie chcę też sugerować konkretnego rodzaju zabezpieczenia, bo przecież oprócz najpopularniejszych  obrazków z mało czytelnymi literami i cyframi, istnieją jeszcze zabezpieczenia głosowe, czy takie polegające na wykonaniu jakiegoś zadania matematycznego, bądź inne bardziej wyrafinowane. Po prostu dostałem zadanie w firmowym projekcie polegające na implementacji weryfikacji obrazkowej i zanim się do tego zabiorę, postanowiłem nieco wcześniej rozeznać się w temacie.

Czytaj więcej »

Zapamiętywanie i walidacja danych w formularzu logowania GWT + JAAS

Widząc rosnące zainteresowanie tematyką bezpieczeństwa w GWT, postanowiłem jak najszybciej dostarczyć Ci kolejną przydatną dawkę informacji. Pamiętasz pewnie wpis o uwierzytelnianiu i autoryzacji w GWT – powstał wtedy mały projekt pokazujący, w jaki sposób połączyć aplikację napisaną w GWT z autoryzacją poprzez mechanizm Javy, a dokładniej użyliśmy JAAS (Java Authentication and Authorization Service). Tamten projekt miał jednak pewne wady, m. in. brak walidacji danych na formularzu logowania oraz nie obsługiwał zapamiętywania tych danych przez przeglądarkę. Pierwszy problem wynikał z użycia przycisku „submit”, który automatycznie wysyłał formularz, nie było więc momentu na sprawdzenie poprawności wysyłanych danych. Natomiast drugi problem jest bardziej złożony i związany z naturą samego GWT. W poszukiwaniu rozwiązania będziemy więc kontynuowali rozpoczęty wcześniej projekt.

Przeszukałem najpierw zasoby internetu, aby sprawdzić, czy występują już jakieś znane rozwiązania wyżej wymienionych problemów. Praktycznie wszystkie przykłady implementacji formularza logowania używają GWT RPC do przesyłania danych, więc nie było w czym przebierać. Jeśli zaś chodzi o zapamiętywanie danych logowania, problemem jest brak bezpośredniej możliwości skorzystania z mechanizmów przeglądarki, bo do tego potrzebny jest formularz wraz z polami loginu i hasła oraz przyciskiem „submit”, który musi znajdować się bezpośrednio w pliku html, a żaden z jego elementów nie może być wstrzykiwany javascript’em. Wszystkie moduły GWT są wstrzykiwane javascript’em w treść strony, dlatego przeglądarka nawet nie proponuje możliwości zapamiętania danych. Czytaj więcej »

Uwierzytelnianie i autoryzacja w GWT za pomocą JAAS

Czas na pierwszy artykuł związany z tym, czym zajmuje się na co dzień. Tym wpisem chcę również zapoczątkować ciąg artykułów na temat GWT, w których będę starał się pokazać co ciekawsze sposoby wykorzystania tej biblioteki. Na dzień dzisiejszy przygotowałem dość ważny temat z punktu widzenia aplikacji webowych, którym jest implementacja mechanizmu bezpieczeństwa za pomocą JAAS (Java Authentication and Authorization Service).

Zaczynając pisać jakąkolwiek aplikację w pewnym momencie zaczynasz myśleć o jej zabezpieczeniu. Piszesz własny formularz logowania, implementujesz obsługę żądania logowania i wylogowywania użytkownika, tworzysz własną obsługę sesji. Jak zapewne wiesz, ten element kodu jest często powtarzalny w każdej nowej aplikacji. Czemu więc nie wyciągnąć go na zewnątrz i nie wykorzystywać jednego fragmentu kodu wszędzie? Z pomocą przychodzi JAAS, framework pozwalający na zapewnienie bezpieczeństwa w każdej aplikacji pisanej w Java. Co daje nam JAAS? Ano to, że nie musimy za każdym razem pisać wielu zbliżonych do siebie linijek kodu, że nie musimy martwić się o błędne zaimplementowanie całego mechanizmu. JAAS pozwala również na wydelegowanie zarządzania użytkownikami i rolami do serwera aplikacji lub innego systemu. Ważnym elementem jest również tak zwane SSO (Single Sing-On), czyli mechanizm jednokrotnego uwierzytelniania do wielu aplikacji korzystających z tych samych dostawców bezpieczeństwa. W tym artykule chcę Ci zaprezentować, jak wdrożyć JAAS w aplikacji opartej na GWT.

Czytaj więcej »