Olá a todos,
O problema é bem simples, desenvolvi um assinador de documentos usando certificados A3, utilizando como exemplo o Nakov Signer [http://www.nakov.com/documents-signing/docs/Digital-Document-Signing-in-Java-based-Web-Applications-En.html].
No entanto uma vez que o usuário digita o pin code correto do token, é possível fazer qualquer operação com o token, é possível até mesmo fazer um load da keystore com a senha errada: keyStore.load(null, "senha errada", provider) que operações posteriores são executadas e nenhuma exceção é lançada.
Já li que ao término de uma assinatura, é conveniente remover o provider criado para a assinatura para desalocar os recursos carregados:
Security.removeProvider("SunPKCS11-SmartCard");
O provider até é removido, mas o comportamento estranho continua. O importante é que a cada nova operação com o token seja necessário que o usuário digite o token para autenticação e valide a operação.