Validar API de un sitio web

Soy nuevo en esto y esta podría ser una pregunta simple. Pero quiero validar que las API provienen de un sitio web.

Entonces, soy revendedor de una empresa con mi propio sitio web. Todos los usuarios están registrados en el sitio web de la empresa principal a través de mi sitio web, lo que significa que los nombres de usuario/contraseñas están asociados con el sitio web de la empresa. Ahora, tengo algunas cosas en mi sitio web que quiero mostrar solo a los usuarios registrados. Además, tengo las API para verificar la combinación de nombre de usuario y contraseña de cualquier usuario que, a cambio, recibo un mensaje similar al siguiente con la ayuda de (file_get_contents):

Si tiene éxito:

***<?xml version="1.0" ?> 
  <!DOCTYPE ValidateUser (View Source for full doctype...)> 
- <ValidateUser>
  <Customer>james</Customer> 
  <Result>Success</Result> 
  </ValidateUser>***

O si falla, entonces:

***<?xml version="1.0" ?> 
  <!DOCTYPE ValidateUser (View Source for full doctype...)> 
- <ValidateUser>
  <Customer>james</Customer> 
  <Result>Failed</Result> 
  <Reason>User/Password combination unknown</Reason> 
  </ValidateUser>***

Esa era la situación. Y estaba pensando en escribir un código php con una declaración if que pueda verificar o validar que el mensaje anterior proviene de la solicitud de API, en base a eso, puedo permitir o rechazar que un usuario visite esa página en particular en mi sitio web.

Espero que tenga sentido para ti. Gracias por adelantado.

preguntado el 12 de junio de 12 a las 15:06

La validación de javascript es puramente para el rendimiento de la página y no proporciona seguridad real. -

Cual es tu pregunta especifica? -

¿Entonces cuál es la pregunta? Todo lo que has escrito parece legítimo hasta ahora.

Lamento que sea confuso, pero mi pregunta es cómo codificar ese script php que puede validar los resultados de la solicitud de API:

2 Respuestas

Echa un vistazo a PHP SimpleXML. El análisis debería ser bastante fácil usando eso.

Algún código similar al siguiente debería hacer el truco:

$result = file_get_contents('http://www.example.com/validate?username=john&pwd=mypwdhash');
$simpleXML = new SimpleXMLElement($result);

if ($simpleXML->ValidateUser[0]->Result == "Success"){
   // success
} else{
  // fail
}

Alternativamente, puede buscar la palabra "éxito" dentro de la cadena XML.

En una nota al margen: el uso de esta metodología para autenticar a los usuarios no es tan seguro, ya que implica solicitudes GET en las que menciona nombres de usuario y hash de contraseña (supongo que usa un hash de contraseña y no la contraseña de texto sin formato, ¿verdad?).

Respondido el 12 de junio de 12 a las 15:06

Hola, probé el método anterior y no entendí completamente el significado de la declaración if if. Copié el código anterior, cambié la URL e intenté repetir '$simpleXML' pero no se mostró nada. por favor explícamelo. Gracias - Sohal 07

La API simpleXML analiza el XML y lo organiza en un objeto/matriz. En otras palabras, es normal que echo no genere nada (ya que echo solo funciona para literales). Prueba print_r($simpleXML). La instrucción if debe verificar si la etiqueta de resultado contiene el texto 'Éxito'. Además, recomiendo leer la documentación que vinculé para comprender mejor cómo funciona la API simpleXML. - Joris

Probablemente no quiera escuchar esto, pero este método de contraseñas compartidas realmente no es una gran configuración proporcionada por el sitio de terceros en cuestión. Esencialmente significa que los usuarios le están ingresando contraseñas (un tercero si lo hice bien) para el otro sitio. Si hay un acceso autenticado para usted a los datos de usuario de su lado, probablemente deberían usar openAuth para esto (http://www.oauth.net) en lugar de compartir contraseñas...

No estoy diciendo necesariamente que debas avisarles (ya que probablemente te costará trabajo), pero lo pensaría. Si hay una brecha de seguridad en sus dedos laterales, es posible que lo apunten a usted porque tuvo acceso a algunas de las contraseñas.

Respondido el 12 de junio de 12 a las 15:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.