Używanie JaaS z Jersey na Grizzly

Próbuję znaleźć prosty, elastyczny sposób dodania uwierzytelniania JaaS do REST. znalazłemsłupek myślę, że prowadzi mnie we właściwym kierunku (patrz odpowiedź StevenC). Brzmi to tak, jakby kontener serwletów był odpowiedzialny za bezpieczeństwo, a nie sam kod Jersey. Podoba mi się ten pomysł, ale potrzebuję trochę wskazówek dotyczących wdrożenia.

Grizzly jest moim kontenerem serwletów i chcę go skonfigurować do używania JaaS do uwierzytelniania. Na razie prosta kombinacja nazwy użytkownika i hasła byłaby w porządku, a kodowanie par nazwa użytkownika / hasło bezpośrednio w kodzie jest w porządku. Dopóki korzysta z JaaS, możemy dopracować te szczegóły później.

Jeśli chodzi o to, co jest przesyłane przez HTTP, myślę, że przechowywanie plików cookie byłoby najłatwiejszym sposobem, aby to wszystko działało. Cokolwiek trzeba, by nie dopuścić do tego, by śmieci uwierzytelniały kod mojego Jersey.

Oto kod do rozpoczęcia Grizzly:


final String baseUri = "http://localhost:9998/";
final Map initParams = new HashMap();

initParams.put("com.sun.jersey.config.property.packages", 
  "my.jersey.Service");

System.out.println("Starting grizzly...");
SelectorThread threadSelector = GrizzlyWebContainerFactory.create(baseUri, initParams);
System.out.println(String.format(
        "Jersey app started with WADL available at %sapplication.wadl\n"
  + "Try out %shelloworld\nHit enter to stop it...", baseUri, baseUri));                
System.in.read();
threadSelector.stopEndpoint();
System.exit(0);

Jeśli ten cały proces działa, jaki jest najlepszy sposób sprawdzenia uprawnień dla użytkownika? Prawdopodobnie chciałbym, aby mój kod REST faktycznie sprawdzał uprawnienia w określonych punktach. Czy jestem nawet na dobrej drodze? Czy istnieje prostszy sposób? Link do samouczka byłby świetną odpowiedzią. Nawet taka odpowiedź jak „Zrobiłem to i to zadziałało” dałaby mi ciepłe rozmycie, które zmierzam we właściwym kierunku.

Dzięki za pomoc.

EDYCJA: Niektóre wyjaśnienia do komentarza StevenC:

Czy nadal chcesz używać filtrów serwletów, aby chronić swoje zasoby? Użyję wszystkiego, co może oddzielić szczegóły uwierzytelnienia od kodu Jersey. Nie musi to być filtr serwletów.Co oznacza „skonfiguruj do korzystania z JaaS”? Pierwotny plan zakładał ochronę obecnego interfejsu API za pomocą JaaS. Następnym etapem byłoby udostępnienie całego interfejsu API online. Wydawało się sensowne mieć otokę Jersey wokół wywołań API, ale zachować uwierzytelnianie obsługiwane przez Grizzly. Wierzę, że Grizzly musiałby nawiązać kontakt z JaaS.Czy myślisz, że powinna istnieć jakaś konfiguracja, która po prostu powoduje, że grizzly chroni twoje zasoby? Rozważałem dwuetapowy proces uwierzytelniania użytkownika i oparty na rolach, upoważniający użytkownika do dostępu do zasobów. Pomysł polegał na autoryzacji Grizzly (za pomocą JaaS) i autoryzacji na Jersey.„Nie widzę potrzeby używania plików cookie z zasobem RESTful”. Byłoby wspaniale usunąć pliki cookie, ale jak można to zrobić? System musi wiedzieć, czy użytkownik jest uwierzytelniony. Wolałbym nie prosić ich o podanie nazwy użytkownika / hasła / etc dla każdego połączenia. Nawet przekazanie tokena sesji jako parametru przy każdym wywołaniu wydaje się „brzydkie”.

Pamiętaj również, że jestem całkiem nowy w REST. Robię SOAP od kilku lat, więc mogę mieć „stronniczość SOAP”, która może mnie oślepiać z jakiegoś oczywistego, prostego rozwiązania, którego wszyscy używają. Jeśli jest łatwiejszy sposób, prosimy o udostępnienie. Po prostu staram się nauczyć jak najwięcej.

questionAnswers(2)

yourAnswerToTheQuestion