Grazie alle nuove features di P/Invoke possiamo utilizzare la libreria winscard.dll, presente nel sistema operativo Windows, per accedere ad una smart card, anche da una applicazione Silverlight 5.
Il sistema operativo Windows ha supportato lo stack del software PC/SC (Personal Computer/Smart Card) per diversi anni.
La funzionalità PC/SC viene resa disponibile dal sistema operativo per le applicazioni tramite l'API client di Windows Smart Card (WinSCard appunto), che è implementata nella dll winscard.dll.
Questa API consente alle applicazioni host di comunicare indirettamente con le smart card tramite il servizio gestione risorse smart card (SCardSvr).
E' da sottolineare che il grande salto nella diffusione a larga scala dell'utilizzo delle smart card è avvenuto dopo l'avvento di Windows Vista che ha 'standardizzato', se così possiamo semplificare, l'accesso a qualunque tipo di card, grazie al modello API Card Module, che consente alle applicazioni in grado di rilevare le smart card di poter ignorare il tipo di card.
In genere le smart card dispongono di file system estremamente semplici, accessibili in lettura/scrittura una volta validata la password (generalmente FFFFFF quando sono vergini).
Ogni comando viene inviato alla card tramite la funzione WinSCard SCardTransmit, per completezza è sempre meglio verificare l'SDK fornito dai produttori di lettori e di smart card, perché non è ancora presente un vero standard.
In ogni caso, si accede al file system direttamente fornendo l'indirizzo di memoria desiderato, e il numero dei byte da leggere/scrivere, (ad esempio 'leggi i primi n byte del file xy').
I comandi che vanno a buon fine, nell'esempio riportato, restituiscono il codice di errore 90 00, ovvero comando avvenuto con successo, altrimenti restituiscono il codice di errore che poi va ricercato nella classe associata che gestisce la dll.
L'esempio mostra solo alcune funzionalità, ma una volta capita la gestione della memoria della smart card a disposizione è possibile implementare tutte le funzioni necessarie.
L'esempio allegato si riferisce ad una smart card tipo SLE5542, ma utilizzabile anche con altri tipi di card.
In sintesi, all'apertura della pagina principale viene invocato il metodo SCardEstabilishContext(), che ha lo scopo di stabilire il contesto operativo.
Se l'operazione va a buon fine allora vengono scansionati i lettori disponibili e caricati in una Combobox (SCardListReaders).
Per connettersi alla card bisogna invocare il metodo SCardConnect.
Infine, per inviare un comando si utilizza la funzione SendAPDUandDisplay, per la quale si rimanda all'esempio allegato per i principali utilizzi.
Diagramma di flusso indicativo del funzionamento della smart card:

Approfondimenti
http://msdn.microsoft.com/en-us/magazine/cc163521.aspxCommenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Generare velocemente pagine CRUD in Blazor con QuickGrid
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Rendere le variabili read-only in una pipeline di Azure DevOps
Creare una libreria CSS universale: Cards
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Utilizzare Container Queries nominali
Testare l'invio dei messaggi con Event Hubs Data Explorer
Gestire codice JavaScript con code splitting e lazy loading
Recuperare l'ultima versione di una release di GitHub
Path addizionali per gli asset in ASP.NET Core MVC
Testare il failover sulle region in Azure Storage
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
I più letti di oggi
- Nuovi corsi ASP e ASP.NET dal 22 novembre a Lugo (RA)
- Microsoft Security Bulletin MS05-029
- Longhorn si chiamerà Windows Vista?
- Semplificare la gestione degli array in querystring in ASP.NET Core
- .NET Aspire per applicazioni distribuite
- Aggiungere un valore neutro ad una DropDownList con il DataSet
- Paginazione e chiavi multiple con il controllo GridView
- Utilizzare CORS con Azure Cosmos DB
- Scoprire le applicazioni senza la pagina di errore personalizzata con LINQ e Microsoft.Web.Administration
- Utilizzare App Streaming Install nella Universal Windows Platform