INTEGRAZIONE DATI RUBRICA ATENEO OBIETTIVI L’obiettivo del progetto è quello di rendere disponibile,tramite un protocollo standard (web service) i dati della rubrica di Ateneo ad applicazioni esterne. Una delle applicazioni che consumerà il servizio sarà una pagina del nuovo sito web d’Ateneo. SITUAZIONE ATTUALE Attualmente i dati della rubrica di Ateneo sono memorizzati su un database Sql Server. Tale database viene interrogato e popolato da una applicazione web (realizzata in proprio all’interno del centro S.I.C. con tecnologia Asp.Net) denominata Servizi On Line, applicazione usata in Ateneo per gestire le richieste e i servizi degli utenti. Tali dati, tramite task pianificati, vengono quotidianamente esportati sul database dell’attuale sito Web. Questa modalità di esportazione presenta principalmente due grossi svantaggi: i dati esposti sulla rubrica Internet non sono aggiornati in tempo reale, ma soltanto dopo l’esecuzione del task giornaliero. le procedure create per l’esportazione non sono riutilizzabili per altre applicazioni SOLUZIONE La soluzione prevede di esportare i dati tramite un web service SOAP realizzato in ASP.NET e pubblicato sul server web IIS 6, già installato nei server d’Ateneo. Questo servizio va reso disponibile a terze applicazioni, deve essere pubblico e deve prevedere tecniche per evitare possibili Denial of Service. Infine, una delle applicazioni che potrà sfruttare questi dati sarà una pagina web del nuovo sito di Ateneo. Questa pagina sarà realizzata sfruttando il linguaggio XSLT che formatterà il documento ricevuto interrogando il web service. Infine saranno usate tecniche AJAX per ottimizzare l’interazione dell’interfaccia web con l’utente. L’interrogazione del web service e la trasformazione XSLT verranno implementate in ASP.NET SPECIFICHE WEB SERVICE ESPORTAZIONE DATI OVERVIEW Il web service dovrà proporre ai client un metodo per interrogare il database. Il client potrà indicare il nominativo di un utente, il web service dovrà interrogare il database e restituire la lista di utenti trovati corrispondenti al nominativo e per ognuno la lista dei suoi contatti. Per ogni utente i dati che verranno forniti saranno i seguenti: Nome e cognome Struttura di afferenza dell’Ateneo Ruolo e funzione di afferenza all’Ateneo (personale tecnico\amministrativo, docente, etc…) Lista di contatti (mail, fax, telefono) AUTENTICAZIONE Il servizio di visualizzazione\esportazione dei dati di rubrica non richiede un processo di autenticazione, in quanto i contatti dei dipendenti dell’Ateneo sono pubblici e attualmente pubblicati sul sito web dell’Università dell’Insubria e disponibili senza processi di autenticazione. SICUREZZA E DENIAL OF SERVICE Essendo questo servizio disponibile al pubblico è necessario predisporre dei sistemi di sicurezza che salvaguardino il servizio web da tecniche di hacking come la sql injection, il cross scripting etc… Il linguaggio di programmazione ASP.NET prevede ed implementa delle tecniche che consentono di ostacolare questi meccanismi. Analizzando per esempio la tecnica di sql injection, questa tecnica consiste nello sfruttare i parametri di input del servizio web come cavallo di troia per lanciare script o comandi dannosi per il database. Questa tecnica può essere neutralizzata con un attento esame dei parametri di input, prima di usarli per comporre query SQL. ASP.NET prevede l’utilizzo di oggetti definiti Parameter, in cui vengono effettuati controlli sulla tipologia del parametro (intero, date time, stringa etc…) e per i parametri di tipo stringa vengono individuati pattern di stringhe potenzialmente pericolosi e neutralizzati. Per quanto riguarda invece Denial of Service, questa è una tecnica del tutto diversa, il cui obiettivo è quello di rendere il servizio web inutilizzabile sovraccaricandolo di richieste in modo che il server esaurisca le risorse disponibili per soddisfarle tutte e vada quindi in crash. Anche in questo caso, l’applicazione ASP.NET prevede tecniche per evitare questo tipo di attacchi (come specificato nella documentazione MSDN ASP.NET). Per esempio: Le richieste possono essere limitate in dimensione (default 4Mb). Per ogni richiesta di un client, viene controllato che questo sia ancora connesso prima di inserire in coda la richiesta. Questo consente di evitare che un hacker possa inviare una serie di richieste simultanee e poi si disconnetta I tempi di esecuzione di una richiesta hanno un timeout configurabile. Questo consente di evitare che una richiesta vada in loop occupando tutte le risorse del server V-CARD I dati della rubrica di Ateneo sono tipi di dati molto comuni e usati in diversi ambiti e da diversi tipi di applicazioni (client di posta, pagine web, cellualari e smart phone). E’ quindi importante che il web service possa esportare tali dati adattandosi alle esigenze del client che lo interroga. Sono previste quindi 2 modalità di esportazione dei contatti di un utente: o o V-CARD formattato tramite RDF-XML secondo SPECIFICHE W3C: questo consentirà a tutte le applicazioni web di ottenere i dati in un formato più comune, intuitivo e facilmente renderizzabile in ambito web mediante trasformazione XSLT in linguaggio XHTML; V-CARD formattato come indicato in RFC 2425 di IETF:utilizzando questo protocollo standard si consente lo scambio dei contatti tra varie applicazioni e vari dispositivi, soprattutto mobili. Nel RFC è definito il formato e i campi che saranno utilizzati per l’implementazione del web service. RFC 2426 è stato usato per attingere le specifiche dei campi utilizzati nella nostra implementazione. Nei contatti V-CARD verranno mappati i campi presenti sulla rubrica pubblica, quindi il nome e il cognome, i dati relativi al ruolo della persona all’interno dell’Ateneo e la struttura di afferenza. Infine la lista di tutti i contatti disponibili, telefoni, mail etc… Ecco la lista dei campi V-CARD che verranno utilizzati nel progetto: (i campi contrassegnati in rosso sono obbligatori, quindi devono essere sempre presenti in ogni contatto V-CARD): Nome campo Name Source fn n TEL;TYPE=work TEL;TYPE=work,cell TEL;TYPE=work,fax EMAIL IMPP;TYPE=sip X-SKYPE TITLE ORG Descrizione Esempio MIME DIRECTORY FEATURES Usato come nome da visualizzare Dante Attanasio nelle informazioni di MIME TYPE (spesso associato al campo source) Indica l’origine del contatto (solitamente un ldap, un database o un AD) IDENTIFICATION TYPES Nome completo, seguendo la Dante Attanasio semantica X.520 Common Name Attribute Indica le varie parti del nome, Attanasio;Dante includendo prefissi o suffissi onorifici TELECOMMUNICATIONS ADDRESSING TYPE Un singolo numero telefonico +39 031 238 **** formattato in base allo standard X.500. Type indica che questo numero è lavorativo Come sopra, per la fonia mobile +39 328 ******* Come sopra, fax +39 031 238 **** Casella di e-mail [email protected] Eventuale account sip Eventuale account skype ORGANIZATIONAL TYPES Titolo della persona (inserito soltanto per il personale docente) Campo fisso composta Università Insubria;Centro SIC dall’organizzazione e la struttura di afferenza Esempio di contatto vcard begin:vcard name:Dante Attanasio src: mixed source fn: Dante Attanasio n:Attanasio;Dante tel;type=work: +39 031 238 9736 tel;type=work,cell: +39 328 0466259 tel;type=work,fax: +39 031 238 9709 email: [email protected] org: Università Insubria;Centro SIC end:vcard Questi campi selezionati dal format V-CARD verranno rappresentati in formato RDF-XML con questa mappatura (I campi begin\end\name e src non vengono tradotti in linguaggi xml in quanto sono pertinenti soltanto nel formato v-card): <?xml version="1.0"?> <rdf:rdf xmlns:rdf = http://www.w3.org/1999/02/22-rdf-syntax-ns# xmlns:vcard = "http://www.w3.org/2001/vcard-rdf/3.0#"> <rdf:description rdf:about = "http://w3.ateneo.uninsubria.it/sol3.0/rubrica.aspx" > <vcard:fn>Dante Attanasio</vcard:fn> <vcard:n rdf:parseType=”Resource”> <vcard:family>Attanasio</vcard:family> <vcard:given>Dante</vcard:given> </vcard:n> <vcard:tel rdf=parsetype=”resource”> <rdf:value>+39 031 238 9736</rdf:value> <rdf:type rdf:resource="http://www.w3.org/2001/vcard-rdf/3.0#work"/> </vcard:tel> <vcard:tel rdf=parsetype=”resource”> <rdf:value>+39 328 0466259</rdf:value> <rdf:type rdf:resource="http://www.w3.org/2001/vcard-rdf/3.0#work"/> <rdf:type rdf:resource="http://www.w3.org/2001/vcard-rdf/3.0#cell"/> </vcard:tel> <vcard:tel rdf=parsetype=”resource”> <rdf:value>+39 031 238 9709</rdf:value> <rdf:type rdf:resource="http://www.w3.org/2001/vcard-rdf/3.0#work"/> <rdf:type rdf:resource="http://www.w3.org/2001/vcard-rdf/3.0#fax"/> </vcard:tel> <vcard:email rdf:parsetype="resource"> <rdf:value>[email protected]</rdf:value> </vcard:email> <vcard:org rdf:parsetype="resource"> <vcard:orgname> Università Insubria </vcard:orgname> </vcard:org> </rdf:description> </rdf:rdf> MAPPATURA DATABASE I campi del contatto V-CARD saranno mappati sul database esistente dei Servizi On Line. In allegato è presente il diagramma completo dello schema E-R dell’intero database. In realtà per la parte di interesse per questo progetto verrà utilizzata una vista che effettua il join tra diverse tabelle del database denominata V_RUBRICA_PUBBLICA.In questa vista verrà effettuata questa query: SELECT DISTINCT cognome,nome,ruolo FROM V_RUBRICA_PUBBLICA WHERE cognome + ' ' + nome LIKE '%?NOME%' In questa vista, ogni riga rappresenta un contatto. Ogni riga contiene anche le informazioni anagrafiche dell’utente, che nel caso abbia più di un contatto sono duplicate. Ecco un esempio dei risultati del metodo cerca_persone indicato nel paragrafo successivo. Cognome ATTANASIO Nome DANTE Ruolo Personale Tecnico Amministrativo Id utente 1196 I campi cognome e nome saranno usati per i campi name, fn e n. Ruolo mappa il campo Title. Il campo id_utente invece potrà essere utilizzato dalle applicazioni client da passare come parametro al metodo getContatti. Tale metodo, restituirà la lista dei contatti in uno dei due formati precedentemente indicati (vCard e RDF-XML). Questi dati vengono estratti dalla vista mediante la seguente query: SELECT TIPO_CONTATTO,CONTATTO FROM V_RUBRICA_PUBBLICA WHERE ID_UTENTE=%?ID_UTENTE Tipo contatto Fax Tel Cell E-Mail Contatto 031 238 9709 031 238 9736 328 0466259 [email protected] Da questi dati vengono estratti i vari contatti degli utenti, ed in base al campo tipo_contatto vengono tipizzati e formattati nel rispettivo campo. I tipi di contatto per cui non è prevista una mappatura verranno ignorati. CONTRATTO Il web services espone una serie di metodi: String Cerca_persone(string nome):, passando come parametro una stringa contenente il nome (o una sua parte) restituisce un oggetto XML (sempre di tipo stringa) contenente la lista degli utenti corrispondenti ai criteri indicati. o Parametri: nome: Il parametro passato a questo metodo sarà utilizzato come filtro sui campi nome e cognome dell’utente nel database. Nella prima versione del progetto il numero di parametri si limita al nome, ma in versioni successive si possono prevedere ulteriori filtri, per esempio sulla struttura di afferenza o sul ruolo della persona (per esempio Docente o Personale Tecnico Amministrativo). o Return value: E’ una stringa formattata in linguaggio XML che contiene la lista degli utenti corrispondenti ai criteri indicati nel parametro.[Inserire esempio di formattazione XML dell’oggetto restituito]. String getContatti(string id_utente, int formatoContatti): Questo metodo consente di ottenere tutti i contatti della persona. o Parametri id_utente: è un valore numerico che rappresenta in maniera univoca una persona. La parte client può recuperare questo valore nelle informazioni contenute nell’oggetto XML ricevuto come risposta dal metodo cerca_persone. FormatoContatti: questo parametro indica il formato in cui verranno inviati i contatti. Per informazioni sulle tipologie vedi paragrafo V-CARD. I valori numerici possibili sono 0 e 1 e corrispondono a: 0: Formato RDF-XML; 1: Formato V-CARD. o Return value: oggetto di tipo stringa contenente la lista dei contatti formattati in base al parametro indicato CLIENT WEB OVERVIEW Il primo utilizzatore di questo servizio web sarà proprio una pagina del sito web di Ateneo, che fondamentalmente andrà a sostituire le funzioni della pagina attuale. Questa pagina sarà realizzata sfruttando il linguaggio ASP.NET. Questa pagina presenterà all’utente un form con il quale poter effettuare le richieste, quindi in base agli input ricevuti formulerà la richiesta al servizio web e otterrà come risposta una lista di contatti v-card. Questi saranno opportunamente trasformati per essere visualizzati all’utente. FORM All’utente verrà presentato un form web che dovrà compilare nelle parti desiderate per ottenere le informazioni che desidera. L’attuale form della rubrica Internet presenta soltanto il nominativo da cercare. Inizialmente questo sarà sufficiente per soddisfare la maggior parte delle esigenze degli utenti. Sarà comunque necessario prevedere ulteriori rifiniture dell’applicazione usando filtri aggiuntivi come la struttura di afferenza dell’utente che si desidera cercare o il suo ruolo all’interno dell’Ateneo (docente, personale tecnico etc…). Questi filtri dovranno ovviamente essere compatibili con i filtri esposti dal web service. INTERROGAZIONE WEB SERVICE Il web service verrà interrogato mediante linguaggio di scripting lato server ASP.NET. Per completare un’operazione di ricerca l’applicazione client dovrà interrogare diversi metodi esposti dal web service. Innanzitutto dovrà interrogare il web service passando i parametri necessari (inizialmente soltanto il nominativo dell’utente). Da questa interrogazione il client riceverà un documento xml molto semplice contenente la lista degli utenti che soddisfano i filtri desiderati. L’applicazione client presenterà questa lista all’utente (sempre formattando il contenuto mediante trasformazione XSLT) che dovrà indicare di quale utente desidera vedere la lista dei contatti. L’applicazione client dovrà quindi interrogare il web service passando come parametro l’ID dell’utente desiderato. Dovrà inoltre indicare il formato in cui desidera ricevere questi dati. Inizialmente, lo scopo primario dell’applicazione è quello di ottenere i dati per visualizzarli sulla pagina web in formato XHTML. A questo scopo il formato più idoneo è quello RDF-XML, facilmente traducibile in XHTML mediante una trasformazione XSLT. Quindi all’interno di questa pagina sarà presente un link che consentirà all’utente di scaricare sul proprio computer e quindi importare sul proprio client di posta o sul suo dispositivo mobile il contatto in formato V-CARD compatibile con queste applicazioni. Cliccando sul link, quindi, questa applicazione web effettuerà una nuova interrogazione al web services, stavolta indicando il formato V-CARD. Tale contenuto sarà scaricabile dall’utente come file. AJAX Grazie alla tecnologia ajax, è possibile strutturare la pagina in modo da minimizzare le richieste tra il browser e il server web ottenendo una rapidità delle risposte che rende molto gradevole l’interazione con le utente. Inoltre, anche la banda utilizzata viene ridotta, soprattutto viene ottimizzata in quanto viene richiesto soltanto il contenuto d’interesse, mentre quello già disponibile non viene ricaricato uguale. Questo risultato ovviamente, per essere raggiunto, presuppone che il programmatore abbia impostato i contenuti della pagina in maniera idonea. Asp.net 3.5 implementa la tecnologia AJAX strutturando i contenuti in pannelli. Tutte le richieste inerenti questo pannello saranno richieste tramite AJAX, quindi una funziona javascript interroga il server web che elabora la richiesta e risponde alla chiamata javascript del browser con la porzione di codice xhtml necessario per formattare il pannello. Ovviamente asp.net fornisce livelli di configurazione ajax molto più granulari, che potranno essere illustrati in fase di implementazione.