2012-06-27 17 views
5

Buduję interfejs REST API za pomocą Grails. Chcę, aby był on chroniony przy użyciu przepływu OAuth2.0 client_credentials (grant_type). My use-case jest następujący:Grails: Zabezpieczanie interfejsu API REST za pomocą protokołu OAuth2.0

czynnik zewnętrzny wyśle ​​żądanie do czegoś jak

http://server-url/oauth/token?client_id=clientId&client_secret=clientSecret&grant_type=client_credentials 

i uzyskać access_token. Wtedy mój adres URL (chroniony zasobów) powinny być dostepne z czymś jak

http://server-url/resource?access_token={access-token obtained before} 

szukam czegoś, co sprawia, że ​​robi to na Grails proste i szybkie. Jaki będzie najlepszy sposób/narzędzie/plugin do tego? Biblioteka Scribe jest opcją, jeśli istnieją jakieś tutoriale dla mojego konkretnego przypadku użycia, będzie świetnie.

P.S .: Próbowałem wiosennego zabezpieczenia i powiązanych wtyczek, bez radości. Wszelkie alternatywy byłyby miłe.

+0

Niestety, pisarz jest po stronie klienta tylko na chwilę. Ponowne wpisywanie tego. –

Odpowiedz

-1

Na podstawie moich doświadczeń, Scribe został stworzony dla OAuth 1.0 i ma bardzo ograniczone wsparcie dla OAuth 2.0. W rzeczywistości, do testowania naszej własnej implementacji OAuth 2, wszystko, co mogliśmy wykorzystać, było opakowaniem żądania HTTP, musieliśmy zrobić cokolwiek innego ręcznie. Na szczęście zrobienie tego ręcznie jest zaskakująco łatwe.

Ponieważ wciąż nie znalazłem dobrze otwartej biblioteki OAuth 2.0 dla Javy (szczerze mówiąc, nie znam Groovy'ego), zachęcam do napisania kodu klienta dla siebie. Nie potrzebujesz nawet punktu końcowego oddzwaniającego klienta, aby użyć przepływu przydziału poświadczeń klienta. Więc po prostu stwórz żądanie HTTP (jak już pisałeś powyżej, uważaj, aby uniknąć parametrów GET) i uzyskaj zawartość odpowiedzi. Twój przepływ nie używa przekierowań, więc po prostu przeanalizuj obiekt JSON w treści odpowiedzi, np. z biblioteką org.json. Na koniec wyślij żądanie HTTP przy użyciu wyodrębnionego tokenu dostępu.

Pamiętaj, że Twoje przykłady nie są całkowicie zgodne ze standardem. Standard wymaga użycia HTTPS, wysłania tokenu w nagłówku HTTP zamiast parametru GET i sugeruje użycie nagłówka podstawowego autoryzacji HTTP zamiast parametrów GET do określenia poświadczeń klienta.

Mogłem źle zrozumieć twoje pytanie i możesz chcieć zaimplementować stronę serwera. Biblioteka skryptów obsługuje tylko stronę klienta, więc można znaleźć komercyjną implementację lub wdrożyć własny serwer. Jest to złożone zadanie, ale jeśli obsługujesz tylko przepływ danych poświadczeń klienta, staje się prawie łatwe. ;-)

+0

Dzięki za twoje dane wejściowe. Ale jestem zainteresowany implementacją po stronie serwera.Byłem trochę niezdecydowany, aby zaimplementować go od zera, ponieważ nie jestem ekspertem od bezpieczeństwa OAuth i nie chcę pozostawiać żadnych wad bezpieczeństwa: P. Dokładniej, szukałem czegoś, co mogłoby mi pomóc w zapisywaniu/generowaniu wygenerowanych tokenów dostępu [unieważnia je automatycznie po upływie czasu wygaśnięcia] itd. Oczywiście można to zrobić od zera, ale może zostawić pewne luki. Czy coś takiego istnieje dla Javy, która zapewnia łatwy interfejs do generowania, przechowywania tokenów itp. Po stronie serwera? – SoftDev

+0

Nie znam takiej biblioteki, ale przechowywanie tokenów jest najłatwiejszą częścią do wdrożenia jako wtyczka z przejrzystym interfejsem (wystarczy tylko przechowywać, ładować i odwołać operację). Powinieneś być bardziej zaniepokojony szczegółami zabezpieczeń implementującymi przepływ przydziałów poświadczeń klienta i zachowując predefiniowane prawa do poświadczeń klienta. –

2

Mam ten sam problem. Znalazłem wiele wtyczek grails, które pomogły ci uwierzytelnić twoją aplikację w stosunku do innych dostawców oauth, ale nic, co pomogłoby mi uczynić moją aplikację dostawcą oauth. Po wielu kopaniu natknąłem się na tę wtyczkę grails, która zrobi dokładnie to, co chcesz.

https://github.com/adaptivecomputing/grails-spring-security-oauth2-provider

ja wciąż konfigurowania go do mojego wniosku i myślę docs może potrzebować kilku edycji (konkretnie przepływu kod_autoryz) ale mam proste client_credentials płynąć do pracy przy minimalnej konfiguracji. Mam nadzieję, że pomaga!

+0

Ta wtyczka naprawdę brakuje dokumentacji i jest porzucona. W związku z tym skończyłem używać Spring Roo zamiast Grails. Jest bardzo fajna wtyczka dla Roo, a ponieważ Roo jest tylko przepakowaniem vanilla Spring MVC, dostajesz znacznie bardziej oficjalną dokumentację. Tak czy inaczej, jeśli Grails nie jest wymogiem, inne produkty rodziny SpringSource (takie jak Spring MVC lub Roo) mogą lepiej wykonywać implementacje OAuth. To tylko wskazówka dla wszystkich zainteresowanych. To nie powinno być odpowiedzią i jako takie zostawiłem to tutaj w komentarzach. – petersaints

Powiązane problemy