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.