The Java Smartcard I/O API (javax.smartcardio, JSR 268) introduced in Java 1.6 is the bridge between PC/SC readers and the Java world. Java-based applications and applets may now communicate with smartcards in an interoperable and portable way. This makes it possible for web pages to access data stored in smartcards, or to invoke services running in a smartcard (either running a JavaCard cardlet or whatever native card application).
An interesting extension of this technique would be the ability for JavaScript to access the smartcards as well. JavaScript is not Java: Java code is compiled into bytecode, then translated into native code and executed by the computer’s Java Virtual Machine (JVM). JavaScript is interpreted ‘on-the-fly’ by the browser’s JavaScript engine. This would open new opportunities for developers to build quickly and easily smartcard-aware web-based applications purely in HTML+JavaScript.
It is not difficult to implement such a bridge between HTML+JavaScript and smartcards, creating a GUI-less Java applet that will translate JavaScript function calls into calls to javax.smartcardio methods. There are two technical aspects that must be mastered to do so:
- The applet has to be signed, as the smartcard is a critical computer’s resource, not immediately available to the applets running in the sandbox,
- The applet has to be scriptable, in order to expose itself to JavaScript through functions and events. But scriptable and signed applets normally mandate signed JavaScript, something we want to avoid to remain ‘easy’.
We’ve written a small yet precise HOWTO that explains the whole process of developing such an applet. You may download it here.
Following this HOWTO, a sample applet has been developed and signed for demos and tests. You can test it online here (the applet is signed with our certificate ‘www.springcard.com’. You must accept the signature, otherwhise you will be able to list the readers but not to connect to the cards).
You can develop this type of solution with our products in the SpringCard CSB6 Family (CSB6, Prox’N’Roll PC/SC, EasyFinger and CrazyWriter) and our NFC readers/encoders (H512, NFC’Roll).