{"id":118,"date":"2014-06-19T00:07:25","date_gmt":"2014-06-18T22:07:25","guid":{"rendered":"http:\/\/www.valeriofinazzo.it\/wordpress\/?p=118"},"modified":"2014-06-19T00:19:48","modified_gmt":"2014-06-18T22:19:48","slug":"spring-ws-tutorial-8-autenticazione","status":"publish","type":"post","link":"http:\/\/www.valeriofinazzo.it\/wordpress\/2014\/06\/spring-ws-tutorial-8-autenticazione\/","title":{"rendered":"SPRING WS &#8211; TUTORIAL 8 &#8211; AUTENTICAZIONE"},"content":{"rendered":"<p style=\"color: #0d293f; text-align: justify;\">Una volta creati i nostri servizi ci preoccuperemo di applicare delle policy di sicurezza al fine impedirne l&#8217;utilizzo a utenti non autorizzati<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">Le policy di sicurezza si basano su 3 aspetti:<\/p>\n<ul style=\"color: #143c5d; text-align: justify;\">\n<li>l&#8217;autenticazione<\/li>\n<li>la firma<\/li>\n<li>la crittografia<\/li>\n<\/ul>\n<p style=\"color: #0d293f; text-align: justify;\">Implementando meccanismi di autenticazione si limita l&#8217;accesso ad utenti conosciuti dal sistema, con l&#8217;utilizzo della firma si certifica un contenuto e con la crittografia si trasforma il flusso di dati in un flusso impossibile da leggere senza l&#8217;opportuna chiave.<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">Nell&#8217;articolo di oggi vedremo gli strumenti che offre Spring-ws per gestire l&#8217;autenticazione.<\/p>\n<p style=\"color: #0d293f; text-align: justify;\">Spring-ws mette a disposizione 2 implementazioni dell&#8217;interfaccia Interceptor:<\/p>\n<ul style=\"color: #143c5d; text-align: justify;\">\n<li>XwsSecurityInterceptor basato sull&#8217;implementazione della SUN XWSS Xml and Web Service Security<\/li>\n<li>Wss4jSecurityInterceptor basato sull&#8217;implementazione di Apache WSS4J<\/li>\n<\/ul>\n<div style=\"color: #0d293f; text-align: justify;\">Per iniziare vedremo il caso di autenticazione pi\u00f9 semplice, ovvero quello che prevede di inviare come header della soap un tag chiamato UsernameToken che prevede 2 attributi in chiaro contenenti username e password.<\/div>\n<div style=\"color: #0d293f; text-align: justify;\">E&#8217; un meccanismo molto semplice da usare che va abbinato ad altre tecniche come la crittografia, visto che l&#8217;invio in chiaro dei dati di accesso non \u00e8 cosa bella.<\/div>\n<div style=\"color: #0d293f; text-align: justify;\">Scegliamo di usare l&#8217;implementazione\u00a0XwsSecurityInterceptor, che prevede la definizione di un file contenente le policy di sicurezza.<\/div>\n<div style=\"color: #0d293f; text-align: justify;\">All&#8217;interno del file definiamo la regola di sicurezza<\/div>\n<div style=\"color: #0d293f; text-align: justify;\"><\/div>\n<div style=\"color: #0d293f; text-align: justify;\">\n<pre class=\"lang:default decode:true \">&lt;xwss:SecurityConfiguration dumpMessages=\"false\" \r\nxmlns:xwss=\"http:\/\/java.sun.com\/xml\/ns\/xwss\/config\"&gt;\r\n&lt;xwss:RequireUsernameToken \u00a0\r\npasswordDigestRequired=\"false\" nonceRequired=\"false\"\/&gt;\r\n&lt;\/xwss:SecurityConfiguration&gt;<\/pre>\n<p>Stiamo dicendo al nostro modulo che ogni richiesta per essere accettata deve contenere il token UsernameToken, che la password non deve essere crittografata e che non \u00e8 richiesto il nonce. Per maggiori dettagli sugli attributi del token Username rimando alle\u00a0<a style=\"color: #2675b5;\" href=\"http:\/\/download.oracle.com\/docs\/cd\/E17802_01\/webservices\/webservices\/docs\/1.6\/tutorial\/doc\/XWS-SecurityIntro4.html#wp567459\" target=\"_blank\">specifiche<\/a>\u00a0di SUN. Per informazioni sul Nonce ripassate concetti di crittografia.<\/p>\n<\/div>\n<div style=\"color: #0d293f; text-align: justify;\">A questo punto definiamo l&#8217;interceptor e le sue regole<\/div>\n<div style=\"color: #0d293f; text-align: justify;\"><\/div>\n<div style=\"color: #0d293f; text-align: justify;\">\n<pre class=\"lang:default decode:true\">&lt;bean id=\"wsSecurityInterceptor\"\r\nclass=\"org.springframework.ws.soap.security.xwss.XwsSecurityInterceptor\"&gt;\r\n&lt;property name=\"policyConfiguration\" value=\"classpath:securityPolicy.xml\"\/&gt;\r\n&lt;property name=\"callbackHandlers\"&gt;\r\n&lt;list&gt;\r\n&lt;ref bean=\"passwordValidationHandler\"\/&gt;\r\n&lt;\/list&gt;\r\n&lt;\/property&gt;\r\n&lt;\/bean&gt;\r\n&lt;bean id=\"passwordValidationHandler\"\r\n\u00a0class=\"org.springframework.ws.soap.security.xwss.\r\ncallback.SimplePasswordValidationCallbackHandler\"&gt;\r\n\u00a0&lt;property name=\"users\"&gt;\r\n\u00a0&lt;props&gt;\r\n\u00a0&lt;prop key=\"Valerio\"&gt;Finazzo&lt;\/prop&gt;\r\n\u00a0&lt;\/props&gt;\r\n\u00a0&lt;\/property&gt;\r\n&lt;\/bean&gt;<\/pre>\n<p>Il nostro interceptor carica le regole da applicare dal file di policy definito precedentemente, mentre con il bean passwordValidationHandler definiamo gli utenti che possono accedere ai nostri servizi, in questo caso username\/password Valerio\/Finazzo<\/p>\n<\/div>\n<div style=\"color: #0d293f; text-align: justify;\">Qualora nella nostra richiesta non sia presente il token usernameToken il server genera un FAULT specificando l&#8217;errore.<\/div>\n<div style=\"color: #0d293f; text-align: justify;\">Per testare quanto fatto consiglio SoapUi con cui potete creare agevolmente le request e aggiungere gli header per la sicurezza, ottenendo qualcosa del genere<\/div>\n<div style=\"color: #0d293f; text-align: justify;\"><\/div>\n<div style=\"color: #0d293f; text-align: justify;\">\n<pre class=\"lang:default decode:true  crayon-selected\">&lt;soapenv:Envelope \r\nxmlns:sch=\"http:\/\/www.example.org\/schema\" \r\nxmlns:soapenv=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\"&gt;\r\n&lt;soapenv:Header&gt;&lt;wsse:Security \r\nxmlns:wsse=\"http:\/\/docs.oasis-open.org\/wss\/2004\/01\/oasis-200401-wss-wssecurity-secext-1.0.xsd\"&gt;\r\n&lt;wsse:UsernameToken wsu:Id=\"UsernameToken-14\" \r\nxmlns:wsu=\"http:\/\/docs.oasis-open.org\/wss\/2004\/01\/oasis-200401-wss-wssecurity-utility-1.0.xsd\"&gt;\r\n&lt;wsse:Username&gt;Valerio&lt;\/wsse:Username&gt;\r\n&lt;wsse:Password \r\nType=\"http:\/\/docs.oasis-open.org\/wss\/2004\/01\/oasis-200401-wss-username-token-profile-1.0#PasswordText\"&gt;\r\nFinazzo&lt;\/wsse:Password&gt;\r\n&lt;\/wsse:UsernameToken&gt;&lt;\/wsse:Security&gt;\r\n&lt;\/soapenv:Header&gt;\r\n&lt;soapenv:Body&gt;\r\n&lt;sch:RicercaLibroRequest&gt;\r\n&lt;!--Optional:--&gt;\r\n&lt;sch:titolo&gt;?&lt;\/sch:titolo&gt;\r\n&lt;!--Optional:--&gt;\r\n&lt;sch:nome&gt;?&lt;\/sch:nome&gt;\r\n&lt;!--Optional:--&gt;\r\n&lt;sch:cognome&gt;?&lt;\/sch:cognome&gt;\r\n&lt;\/sch:RicercaLibroRequest&gt;\r\n&lt;\/soapenv:Body&gt;\r\n&lt;\/soapenv:Envelope&gt;<\/pre>\n<p>Nel prossimo articolo vedremo tecniche pi\u00f9 avanzate per gestire l&#8217;autenticazione.<\/p>\n<\/div>\n<p style=\"text-align: justify;\">\n","protected":false},"excerpt":{"rendered":"<p>Una volta creati i nostri servizi ci preoccuperemo di applicare delle policy di sicurezza al fine impedirne l&#8217;utilizzo a utenti non autorizzati Le policy di sicurezza si basano su 3 aspetti: l&#8217;autenticazione la firma la crittografia Implementando meccanismi di autenticazione si limita l&#8217;accesso ad utenti conosciuti dal sistema, con l&#8217;utilizzo della firma si certifica un &hellip; <a href=\"http:\/\/www.valeriofinazzo.it\/wordpress\/2014\/06\/spring-ws-tutorial-8-autenticazione\/\" class=\"more-link\">Continua la lettura di <span class=\"screen-reader-text\">SPRING WS &#8211; TUTORIAL 8 &#8211; AUTENTICAZIONE<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[20],"tags":[21,22],"_links":{"self":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/118"}],"collection":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/comments?post=118"}],"version-history":[{"count":2,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/118\/revisions"}],"predecessor-version":[{"id":131,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/118\/revisions\/131"}],"wp:attachment":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/media?parent=118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/categories?post=118"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/tags?post=118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}