En este artículo mencionaremos cómo utilizar la función de validación remota de los dispositivos Minmoe.
La validación remota permite que el dispositivo envíe un evento mediante webpost en formato JSON de la persona que se está autenticando hacia una plataforma tercera, la plataforma tercera valida si la persona tiene acceso o no, luego envía una respuesta al dispositivo y este acepta o deniega el acceso al usuario.
Procedimiento
Primero debemos validar que el dispositivo sí sea compatible con esta función, para esto utilizamos este endpoint:
GET /ISAPI/AccessControl/AcsCfg/capabilities?format=json
En la respueste debemos encontrar esto para confirmar que sí lo soporta.
"remoteCheckDoorEnabled": {
"@opt": [
true,
false
]
}
Luego, utilizamos el siguiente endpoint para configurar el dispositivo:
PUT /ISAPI/AccessControl/AcsCfg?format=json
Body:
{
"AcsCfg": {
"uploadCapPic": true,
"saveCapPic": true,
"uploadCapPicWhenCallEnabled": true,
"voicePrompt": true,
"protocol": "Private",
"showPicture": false,
"showEmployeeNo": false,
"showName": true,
"uploadVerificationPic": true,
"saveVerificationPic": true,
"desensitiseEmployeeNo": true,
"desensitiseName": true,
"saveFacePic": true,
"faceBatchModelingMode": "recognitionPriority",
"remoteCheckDoorEnabled": true,
"checkChannelType": "ISAPIListen",
"needDeviceCheck": false,
"remoteCheckTimeout": 10,
"remoteCheckVerifyMode": 7,
"offlineDevCheckOpenDoorEnabled": false,
"remoteCheckWithISAPIListen": "async",
"remoteCheckUserTypeList": [
"normal",
"visitor",
"unregistered"
],
"uploadVerificationPicType": 0,
"externalCardReaderEnabled": false,
"combinationAuthenticationTimeout": 5,
"combinationAuthenticationLimitOrder": true,
"faceDuplicateCheckEnabled": false,
"userPassJudgeMode": "byAuthResult"
}
}
Donde:
remoteCheckDoorEnabled = true, activa la función de validación remota.
checkChannelType = ISAPIListen, indica que los eventos los notificará mediante ISAPI Listen
remoteCheckTimeout = 10, especifica el tiempo que esperará el dispositivo para una respuesta.
Por último configuraremos el dispositivo para que envíe los eventos mediante ISAPI Listen, para esto utilizamos el siguiente endpoint:
POST /ISAPI/Event/notification/httpHosts
<HttpHostNotificationList>
<HttpHostNotification>
<id>2</id>
<url>/lectura</url>
<protocolType>HTTP</protocolType>
<parameterFormatType>JSON</parameterFormatType
<addressingFormatType>ipaddress</addressingFormatType
<ipAddress>192.168.50.253</ipAddress>
<portNo>8097</portNo>
<eventMode>all</eventMode>
<type>mixedTargetDetection</type>
</HttpHostNotification>
</HttpHostNotificationList>
Si los eventos se enviarán a un nombre de dominio, la configuración sería similar a los siguiente:
POST /ISAPI/Event/notification/httpHosts
<HttpHostNotificationList>
<HttpHostNotification>
<id>2</id>
<url>/lectura</url>
<protocolType>HTTPS</protocolType>
<parameterFormatType>JSON</parameterFormatType
<addressingFormatType>hostname</addressingFormatType
<hostName>syscom.mx</hostName>
<portNo>443</portNo>
<eventMode>all</eventMode>
<type>mixedTargetDetection</type>
</HttpHostNotification>
</HttpHostNotificationList>
Prueba de funcionamiento
En nuestro ejemplo, el dispositivo enviará la información para validación a un servidor web demo.
Cuando el usuario se autentique, en la pantalla aparecerá una leyenda indicando que se está validando remotamente:
En ese momento, el servidor recibirá una notificación de la persona que está intentando autenticar. El evento contendrá la información del usuario y un identificador único para cada evento (serialNo):
Después de validar si el usuario tiene acceso o no, debemos utilizar el siguiente endpoint para indicarle al dispositivo el resultado de la validación remota:
PUT /ISAPI/AccessControl/remoteCheck?format=json
Body:
{
"RemoteCheck":{
"serialNo":1,
"checkResult": "success" /*[success, failed]*/
}
}
Donde:
serialNo = 1, es el número de evento del cual estamos validando remotamente.
checkResult = success, es el resultado de la validación del usuario.
Al final, aparecerá el mensaje del resultado en el dispositivo: