Bueno, recomiendo no enviando el nombre de usuario/contraseña a través de texto sin formato bajo ninguna circunstancia (incluso cuando se encuentre bajo SSL). En cambio, sugeriría usar una forma de autenticación Digest.
En su lugar, sugeriría generar un token de autenticación grande (una cadena aleatoria de gran tamaño, 128 caracteres). Luego, los usuarios instalarían este "token" en su aplicación.
Ahora, cuando la aplicación busca actualizaciones, primero activa una solicitud a su servidor solicitando un token de resumen. Este es un token de uso aleatorio que se usa solo una vez para una sola solicitud. Su aplicación debe generar un token, almacenarlo en un formato duradero (archivo, memoria, base de datos, etc.) junto con la marca de tiempo y luego devolverlo.
Ahora, su aplicación recibe este token de resumen (llamado $dt
aquí). Luego, lo haces con el token de autenticación preconfigurado que ya se proporcionó.
$authBit = $username . ':' . $authToken;
$hash = hash_hmac('sha256', $authBit, $digestToken);
$authField = $username . ':' . $hash . ':' . $digestToken;
A continuación, enviar el $authField
al servidor.El servidor entonces dividir las partes:
list ($user, $hash, $digestToken) = explode(':', $authField);
Ahora, por primera vez las operaciones de búsqueda token de autenticación del usuario en la base de datos y almacenarlo en $authToken
. A continuación, busque el $digestToken
para asegurarse de que existe y que se creó hace menos de 60 segundos (puede ajustarlo si es demasiado corto, pero no lo hace mucho más). De cualquier manera, elimínelo de la base de datos en este punto (para evitar que se reutilice).
Ahora, si el $digestToken
existe y es válida, y se puede encontrar una $authToken
, a continuación, sólo hacer la siguiente comprobación:
$stub = $user . ':' . $authToken;
if ($hash == hash_hmac('sha256', $stub, $digestToken)) {
//valid user
} else {
//Not valid
}
Tiene la ventaja de cambiar el testigo de todos y petición http nunca sola enviado (cualquiera que lea la secuencia de solicitud no podrá obtener ninguna información sensible de la solicitud, que no sea el nombre de usuario que podría enmascarar si lo desea) ...
es posible que tenga en cuenta el hash/salt. es decir, los clientes solicitan el uso de una contraseña hash que es hash de nuevo utilizando una sal que solo su servidor conoce. –
Este es el tipo de pregunta que sería perfecto para http://area51.stackexchange.com/proposals/12123/webservice-apis – Cyclone