1. B.A.C.H. per chi non c’era
di Fabrizio Marchesano, Frame srl
Prima parte
Disclaimer 1: il presente testo è la revisione in formato articolo della sessione relativa a Domino &
BlackBerry presentata all'evento Dominopoint; anche se i contenuti sono i medesimi, l'esposizione degli
argomenti è naturalmente stata adattata alla pubblicazione per iscritto.
Disclaimer 2: questo articolo è rivolto a sviluppatori e amministratori che abbiano già dimestichezza con
i dispositivi BlackBerry e l'ambiente di sviluppo Domino; anche se in alcuni casi, a scopo di maggior
chiarezza, verranno ribaditi alcuni concetti primari, si dà per scontata una conoscenza di base della
terminologia utilizzata e dei software di riferimento.
«Sarebbe possibile utilizzare il dispositivo BlackBerry per accedere ai dati della
Intranet senza necessità di autenticarsi ad ogni accesso pur mantenendo gli attuali
standard di sicurezza?»
È stata questa legittima domanda, postami da un cliente, a dare l’avvio al progetto
B.A.C.H. – BlackBerry Application Central Highways (per inciso, la versione
originale della richiesta era priva della parte relativa alla sicurezza, aggiunta a seguito
della mia prima risposta: «Certo, è sufficiente assegnare all’utenza “Default” tutti i
diritti di lettura e scrittura»… mai sperare che un ingegnere possa considerare i
sottintesi).
Domanda legittima, dicevamo: le utenze e relative password aziendali sono spesso
(giustamente) complicate, con lettere (maiuscole e minuscole), numeri, ma anche
segni grafici come punti esclamativi, asterischi, parentesi quadre, eccetera, che
richiedono una combinazione di tasti per essere digitati e se ci si ritrova nella necessità
di accedere via BlackBerry a un dato presente nella Intranet è perché si è lontano
dall’ufficio e il dato serve subito (che è poi uno dei tanti motivi alla base del successo
delle applicazioni mobile) ragion per cui l’inserimento di caratteri complessi viene
vissuto come una scomodità necessaria ma eccessiva.
Comprensibile, quindi, la richiesta di cui sopra.
È sicuramente possibile configurare il BES (BlackBerry Enterprise Server) in modo da
attivare lo storage dei dati di autenticazione sui dispositivi, ma bisogna fare conto con
il timeout delle informazioni e comunque la configurazione richiesta potrebbe
scontrarsi con le security policies aziendali.
C’è però una terza strada, che in ambiente Domino è facilmente percorribile:
l’autenticazione in backend a seguito di identificazione dell’utente tramite i dati univoci
del dispositivo BlackBerry.
Procediamo con ordine.
Ogni dispositivo fisico BlackBerry è univocamente identificato da codici ad esso
associati e memorizzati sul dispositivo stesso, quale ad esempio il PIN, stringa
alfanumerica di otto caratteri il cui valore è visualizzabile su BlackBerry nella
schermata raggiungibile cliccando sul menù “Impostazioni” e quindi su “Stato” (N.B.:
a seconda del modello, la sequenza potrebbe risultare differente).
2. Come visibile nello screenshot successivo (da software BlackBerry Manager),
l'assegnazione da BES di un dispositivo BlackBerry a un utente comporta la seguente
associazione univoca: utenza, email, PIN.
In Domino, queste informazioni sono contenute nel database BlackBerry User
Profiles (il path di default è: BESBlackBerryProfiles.nsf; naturalmente l'informazione
può essere replicata in altri archivi, come ad esempio un database di anagrafica Staff).
In altre parole, noto il PIN, è possibile risalire all'identità dell'utente associato tramite
formule di lookup o script analoghi.
Vediamo come questo può esserci d'aiuto.
Innanzitutto, dobbiamo renderci in grado di ottenere l'informazione necessaria, ossia il
PIN, differenziando le metodologie di acquisizione del dato in dipendenza dal tipo di
applicazione utilizzata (applicazioni web via browser oppure applicazioni MDS Studio
via web services).
Analizziamole nel dettaglio.
Recupero del PIN da applicazioni web via browser
Le parole chiave sono HTTP REQUEST HEADER.
È infatti possibile aggiungere le informazioni che ci interessano nelle HTTP Headers
delle richieste generate da dispositivi BlackBerry.
Per ottenere questo risultato è necessario:
● sul BES, editare (anche con un semplice Blocco Note) il file rimpublic.property
(normalmente salvato in un percorso simile a qualcosa tipo C:Program Files
Research In MotionBlackBerry Enterprise ServerMDSServers<MDS Server
Name>config)
● individuare la sezione con intestazione [HTTP HANDLER] (se non c'è, createla)
● per includere il PIN, scrivere: application.handler.http.header=pin
● per includere nell'header anche l'indirizzo di posta elettronica associato al
dispositivo, aggiungere la riga: application.handler.http.header=email
● solo per MDS Server versione 4.0 e successive: nel caso in cui si desideri
inviare entrambe le informazioni, è possibile aggiungere un'unica riga di testo
specificando le due variabili, separate da una virgola, scrivendo
application.handler.http.header=email,pin
3. ● naturalmente, non vogliamo che queste informazioni vengano memorizzate in
ogni nostra richiesta HTTP in giro per la rete, perciò limitiamo l'aggiunta di
queste informazioni a domini della nostra Intranet scrivendo ad esempio:
application.handler.http.header.domain=.+.miodominio.it (per
aggiungere più domini utilizzare il punto e virgola come separatore, così:
application.handler.http.header.domain=.+.dominio1.com;.+
.dominio2.com)
Esplicitando la porzione di codice aggiunta, abbiamo:
[HTTP HANDLER]
application.handler.http.header=email,pin
application.handler.http.header.domain=.+.miodominio.it
Salvate il file rimpublic.property e riavviate il server BES: le informazioni richieste
saranno ora disponibili nel vostro Header per le richieste HTTP inviate da dispositivi
BlackBerry.
NOTA: le specifiche qui descritte sono reperibili nella BlackBerry Developers
Knowledge Base a questo indirizzo
Recupero del PIN da applicazioni MDS Studio via web services
Come visibile nello screenshot successivo, il potente ambiente di sviluppo per
applicazioni MDS via web services chiamato MDS Studio mette a nostra disposizione
una serie di variabili di sistema che contengono proprio i dati che ci servono:
Configurando il nostro server BES in modo che le Device Policies consentano la lettura
di informazioni da un'applicazione all'altra (di seguito i dettagli), ogni applicazione MDS
avrà a disposizione una variabile, normalmente mappata come gDeviceInfo.PIN, che
conterrà appunto il PIN del dispositivo.
La configurazione necessaria è riferita al parametro Allow External Access, che dovrà
essere valorizzato almeno a “1” (0=nessun accesso; 1=accesso in lettura; 2=accesso
completo):
4. Struttura dei dati in ambiente Domino
Bene, abbiamo quindi opportunamente configurato il server BES in modo da
consentire l'invio delle informazioni richieste da BlackBerry.
Per verificare la struttura di questi dati in Domino sarà sufficiente realizzare un Notes
Agent che espliciti in una pagina HTML realizzata “al volo” il contenuto dell'HTTP
Header, ad esempio:
Sub Initialize
Dim Ss As New NotesSession
Dim wDoc As NotesDocument
' documento http
Set wDoc=Ss.DocumentContext
Forall x In wDoc.Items
Print quot;<b>quot;+Ucase(x.Name)+quot;</b>quot;+quot; = quot;+x.Text+quot;<br>quot;
End Forall
End Sub
Attivando la procedura sopra descritta accedendovi via BlackBerry Browser
(aprendo un URL così strutturato: http://server/database/NomeAgente?OpenAgent),
si otterrà una pagina HTML contenente i dati di riferimento:
5. Via script, dunque, i valori che ci interessano saranno accessibili tramite istruzioni
come:
NotesDocument.HTTP_RIM_DEVICE_ID(0)
oppure:
NotesDocument.HTTP_RIM_DEVICE_EMAIL(0)
Via formula, è possibile utilizzare la funzione @GetHTTPHeader (implementata in
Domino a partire dalla R6) specificando le variabili target in questo modo:
@GetHTTPHeader(quot;Rim-Device-IDquot;)
@GetHTTPHeader(quot;Rim-Device-EMailquot;)
In caso di applicazioni web realizzate in Domino, ottimizzate per l'utilizzo via
BlackBerry e accedute tramite BlackBerry Browser siamo quindi in grado di ottenere le
informazioni relative al PIN e all'indirizzo di posta elettronica associato al dispositivo.
Per applicazioni MDS Studio, rivolte all'impiego di web services, sarà sufficiente
prevedere un campo, non necessariamente visibile, nella schermata di accesso
dell'applicazione stessa:
Il valore iniziale del campo sarà impostato a @gDeviceInfo.PIN , mentre l'identificativo
del campo stesso diventerà il nostro riferimento per le variabili Domino utilizzate nei
web services:
6. Il nostro web service, ad esempio realizzato in Lotus Script, dovrà quindi avere come
punto di partenza una function che si occupi di assegnare all'apposita variabile il
valore così ottenuto:
Function getPIN(myPIN as String) As PIN
Abbiamo così ottenuto il valore del PIN identificativo di un dispositivo BlackBerry, da
applicazioni web o MDS Studio; nella seconda parte dell'articolo, vedremo come tutto
ciò possa essere sfruttato per la realizzazione di un framework centralizzato per lo
sviluppo (e l'utilizzo) rapido di applicazioni BlackBerry in ambiente Domino.