Ejemplos.
Autoinstalación del soft al insertar el CD de demo. ^
El CD contiene un archivo
autorun.inf con:
[autorun]
shellexecute=install.js
El archivo
install.js detecta si está instalado el
soft y lo instala si procede:
instalar=true;
try {
var Clauer = new ActiveXObject("CryptoNisu.Clauer");
if (Clauer.getClauerSoftVersion() >= 20060401)
instalar=false;
}
catch(e) {
}
if (instalar) {
var WS = new ActiveXObject("WScript.Shell");
WS.Run("setup-base.exe",1,true);
}
Usuario y contraseña vs. dispositivo. ^
Se trata de compatibilizar usuario y contraseña con el uso del dispositivo, en este caso sin contraseña para la credencial.
En el cliente, si el dispositivo está insertado el formulario se envía automáticamente, si no, solicita usuario y contraseña.
Dentro de una página web, parece que debe instanciarse usando
<object> y no con
ActiveXObject.
<form name=formu ... >
<input type=hidden name=vCred>
<object id="Clauer" classid="CLSID:EF9DBF85-F6AE-44A9-A0F2-344212E39382" width=0 height=0>
</object>
<script>
try {
if (Clauer.setClauerActive('',true)) {
// utilizar Clauer.setClauerCryptoMode(); si la cartera está protegida
vCred.value=Clauer.getClauerToken ('Credencial','','');
if (vCred.value != '') {
// Clauer.setClauerClearMode();
formu.submit();
}
}
}
catch(e) { }
</script>
Usuario: <input name=user><br>
Contraseña: <input name=pwd type=password> <input type=submit value=Enviar>
</form>
En el servidor (PHP):
if ($vCred=$_GET['vCred'])
auth_credencial($vCred);
else
auth_user($_GET['user'],$_GET['pwd']);
"Cambio" de contraseña de la credencial. ^
Sin modificar para nada la cartera, podemos cambiar la contraseña de la credencial si es 100% aleatoria, pues lo único que hay que cambiar es
el resultado. Es decir, se supone que el servidor tiene el resultado de getClauerToken con una contraseña determinada. Basta con enviar
este resultado con la contraseña actual para autenticarse y el resultado de la nueva para que el servidor lo guarde.
<object id="Clauer" ...></object>
<form method=post ... onsubmit="
if (pwdNueva.value != pwdNueva2.value) {
alert("La nueva contraseña no coincide");
return false;
}
else {
try {
// siempre sin reto
if (! Clauer.setClauerActive('',true)) {
alert("Introduzca el dispositivo");
return false;
}
pwdAct=Clauer.getClauerToken('MiCredencial',pwdAct.value,'');
if (pwdAct == '') {
alert("Dispositivo incorrecto, deje sólo el dispositivo que corresponde");
return false;
}
pwdNueva=Clauer.getClauerToken('MiCredencial',pwdNueva.value,'');
return true;
}
catch (e) { }
}">
Contraseña actual: <input name=pwdAct type=password><br>
Nueva contraseña: <input name=pwdNueva type=password><br>
Otra vez: <input name=pwdNueva2 type=password> <input type=submit value=Cambiar>
</form>
Y en el servidor:
if ( auth_credencial($_POST['pwdAct']) )
actualiza_credencial($_POST['pwdAct'],$_POST['pwdNueva']);
Tomar la credencial del dispositivo insertado. ^
Se trata de detectar si hay dispositivo insertado y dar la opción de tomar la credencial, una vez el usuario está autenticado.
<form method=post name=formu ... >
<object id="Clauer" ...></object>
<script>
try {
if (Clauer.setClauerActive('',true)) {
cred=getClauerToken('La credencial','','');
if (cred != '') {
// sólo escribe si hay un dispositivo con esa credencial
document.write('<br><input name=vCred type=checkbox> Cojer este dispositivo para identificarse');
formu.vCred.value=cred;
}
}
catch(e) { }
}
</script>
</form>
Como mejora, podría usarse
setTimeout para detectar la inserción de un dispositivo válido:
function detect() {
...
if (Clauer.setClauerActive('',true)) {
...
else
setTimeout('detect()',1000);
Y en el servidor (usuario autenticado):
if (vCred=$POST['vCred'])
update ...