Działający Klient Java REST przykład dostępu do CAS REST API

Śledziłem Ten tutorial, aby włączyć usługę REST na moim lokalnym serwerze CAS.

Jednak nie ma przykładu Javy

"przykład Java REST Client

Potrzebujemy prawdziwego, działającego przykładu, poprzedni jest bezużyteczny. Wiele osób wysyła mi e-maile, że to nie działa, a ja potwierdzam, że nie działa."

Udało mi się znaleźć to ale to niestety nie zadziałało.

Jakieś wskazówki/linki? Doceniam to.

Author: Nikhil K S, 2014-03-25

4 answers

Mam!

Oto kompletne rozwiązanie, jak włączyć CAS REST API i być w stanie połączyć się z nim za pośrednictwem klienta Java REST, aby korzystać z innych

  • Pobierz kod źródłowy CAS.
  • przejrzyj Ten Artykuł
  • Dodaj pom.xml jak sugeruje artykuł w #2

<dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-integration-restlet</artifactId> <version>${cas.version}</version> <type>jar</type> </dependency>

  • upewnij się, że dodałeś następujący tekst do pom.xml, aby uniknąć kolizji słoików sprężynowych. W moim przypadku CAS-server-integration-restlet był zależny od spring-web, która domyślnie używana jest starsza wersja sprężyny. Więc wyraźnie zdefiniowałem

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.1.1.RELEASE</version> </dependency>

  • Skompiluj swój kod cas. Powinien dostać cas.wojna w folderze docelowym.
  • załaduj go na serwer, zmień uprawnienia na tomcat i poczekaj, aż zostanie wdrożony
  • W CATALINA / conf znajdź serwer.Konfiguracja portu xml i uncomment 8443 tak, aby nasz sever umożliwiał połączenia SSL. Podaj też tutaj swoje certyfikaty.
  • / Align = "left" / akta wojenne i przejdź do folderu WEB-INF, aby znaleźć deployerConfigContext.plik xml. Określ, czego CAS użyje do uwierzytelnienia. W moim przypadku użyłem LDAP.
  • Dodaj following do web.xml na artykuł powyżej

<servlet> <servlet-name>restlet</servlet-name> <servlet-class>com.noelios.restlet.ext.spring.RestletFrameworkServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>

<servlet-mapping> <servlet-name>restlet</servlet-name> <url-pattern>/v1/*</url-pattern> </servlet-mapping>

  • Uruchom ponownie program tomcat, aby zmiany weszły w życie.
  • Test, który możesz zalogować się przez standardowy interfejs CAS: https://server:8443/cas/login
  • Test, czy REST API zostało ujawnione poprzez: https://server:8443/cas/v1/tickets
  • teraz połączmy się z nim. Użyłem tego przykładowego kodu. Marka pamiętaj, aby podać poprawne linki i nazwę użytkownika/hasło
  • kiedy próbowałem uruchomić kod tak, jak jest, narzekał na " Caused by: javax. net. ssl. SSLHandshakeException: sun.Ochrona.walidator.ValidatorException: nie powiodło się budowanie ścieżki PKIX: sun.Ochrona.dostawca.certpath.SunCertPathBuilderException: nie można znaleźć prawidłowej ścieżki certyfikacji do żądanego celu". Zasadniczo prosząc o zainstalowanie Cert. Jeśli masz dostęp do serwera, po prostu skopiuj go. Jeśli nie, znalazłem Ten kod, który zajmie się instalacją dla Ciebie, jeśli nie masz dostępu lub po prostu zbyt leniwy:) {]}
  • Teraz, jeśli uruchomisz klienta JAVA CAS z poprawnymi poświadczeniami, powinieneś zobaczyć coś w stylu
201
https://server_name:8443/cas/v1/tickets/TGT-4-rhVWLapYuOYi4InSEcmfNcABzaLMCPJgGIzlKqU1vb50zxb6pp-server_name
Tgt is : TGT-4-rhVWLapYuOYi4InSEcmfNcABzaLMCPJgGIzlKqU1vb50zxb6pp-server_name.ndev.coic.mil
Service url is : service=https%3A%2F%2Fmyserver.com%2FtestApplication
https://server_name:8443/cas/v1/tickets/TGT-4-rhVWLapYuOYi4InSEcmfNcABzaLMCPJgGIzlKqU1vb50zxb6pp-server_name
Response code is:  200
200
ST-4-BZNVm9h6k3DAvSQe5I3C-server_name
  • Możesz zobaczyć kod 200 i bilet. Jeśli chcesz przejrzeć logi swojego cas na serwerze, powinieneś zobaczyć wiadomości o udanej atenacji i generowaniu biletów.
  • Zmień nazwę użytkownika/hasło na fałszywe dane i spróbuj uruchomić kod. Dostaniesz Komunikat o błędzie 400, co oznacza, że odmowa dostępu.
Sukces!
 17
Author: krinker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-25 16:54:52

Dla CAS 4.0 jest to nieco prostsze (testowane na apache-tomcat-7.0.55)

W Twoim pom.xml add following dependency
    <dependency>
        <groupId>org.jasig.cas</groupId>
        <artifactId>cas-server-integration-restlet</artifactId>
        <version>4.0.0</version>
        <scope>runtime</scope>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

Bezpośrednia zależność od springframework nie jest konieczna, ponieważ wykluczenia uniemożliwiają duplikowanie pakietów

W Twojej sieci.xml musisz dodać mapowanie servleta dla restleta (pakiet mind zmienił się z com.noelios.restlet... do org.restlet...

    <servlet>
        <servlet-name>restlet</servlet-name>
        <servlet-class>org.restlet.ext.spring.RestletFrameworkServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>restlet</servlet-name>
        <url-pattern>/v1/*</url-pattern>
    </servlet-mapping>  

W wyniku powyższych kroków w katalogu yuor WEB-INF / lib po nowych plikach należy dodano

ls target/cas/WEB-INF/lib/ | grep restlet
cas-server-integration-restlet-4.0.0.jar
org.restlet-2.1.0.jar
org.restlet.ext.servlet-2.1.0.jar
org.restlet.ext.slf4j-2.1.0.jar
org.restlet.ext.spring-2.1.0.jar
 4
Author: Marek Chodor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-01 10:00:48

Jeśli chcesz pominąć weryfikację cert dodaj to do swojego klienta Java

//////////////////////////////////////////////////////////////////////////////////////
// this block of code turns off the certificate validation so the client can talk to an SSL
// server that uses a self-signed certificate
//
// !!!! WARNING make sure NOT to do this against a production site
//
// this block of code owes thanks to http://www.exampledepot.com/egs/javax.net.ssl/trustall.html
//

TrustManager[] trustAllCerts = new TrustManager[] {
    new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType){}

        public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType){}
    }
};

SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

//
//
// end of block of code that turns off certificate validation
// ////////////////////////////////////////////////////////////////////////////////////
 2
Author: krinker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-25 21:49:40

Zazwyczaj deweloperzy są zdezorientowani co do tego, jak uruchomić klienta rest podczas uzyskiwania dostępu do zabezpieczonej usługi internetowej CAS. Większość pytań było pytaniem, jak uzyskać restlet CAS zabezpiecza webservice i jak zadzwonić do tych usług internetowych, ponieważ żaden prawdziwy przykład nie działa.

Właściwie to jest. Groovy przykład jest na JASIG Cas restlet przykład https://wiki.jasig.org/display/casum/restful + api {[7] } jasno pokazuje, jak uzyskać uwierzytelnienie, aby wywołać usługę (jego użycie Groovy, ale konwersja do Javy powinna być prosta) . Ale moim zdaniem, to nie jasno wyjaśnić, że Klient musi najpierw uwierzytelnić się do wyznaczonego serwisu internetowego przed uzyskaniem dostępu CAS zabezpieczonej usługi internetowej.

Na przykład, załóżmy, że istnieje usługa JSON, która zabezpieczyła się za pomocą CAS i zbudowała za pomocą Javy i Springa. I używasz kodu opisującego w sekcji groovy na https://wiki.jasig.org/display/casum/restful + api

String casUrl="https://yourcas.com/v1/tickets"
String springTicketValidation="http://yourservice.com/j_spring_cas_security_check"
String serviceToCall="http://yourservice.com/serviceToCall"

Aby twój klient mógł zadzwonić usługa, musisz przestrzegać tych prostych zasad:

  1. Pobierz bilet z CAS
  2. W związku z tym, że nie jest to możliwe, nie jest to możliwe.]}
  3. Authenticate to your service ticket validator (w tym momencie URL podany na springTicketValidation)
  4. wreszcie zadzwoń do swojego serwisu

Lub w perspektywie kodu

String ticketGrantingTicket = getTicketGrantingTicket(casUrl, username, password)
String serviceTicket = client.getServiceTicket(casUrl, ticketGrantingTicket, serviceToCall)
// validate your ticket first to your application
getServiceCall(springTicketValidation, serviceTicket)
getServiceCall(serviceToCall, serviceTicket)

I dla twojej uwagi, wszystkie te operacje powinny być wykonane w następujący warunek:

  1. Twoje wywołanie (zarówno wywołanie restlet jak i wywołanie service) powinno być wykonane w tym samym obiekcie HttpClient. Wygląda na to, że CAS umieścił "coś" w obiekcie sesji, który zweryfikował się podczas wywoływania usługi. Nie powiedzie się to, a zawsze otrzymasz stronę logowania na wynik HTTP.
  2. twój Klient cas powinien być w stanie rozpoznać twój certyfikat SSL CAS, w przeciwnym razie spowoduje to błąd budowania ścieżki PKIX
  3. Ten przykład jest oparty na serwisie WWW cas, który za pomocą Zabezpieczenie sprężynowe do zabezpieczonych usług z CAS. Nie jestem pewien, czy inne zabezpieczone cas powinny wymagać walidacji biletu po stronie aplikacji, czy nie

Hope this help

 2
Author: rama3i,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-30 09:27:38