symfony2 json_login ispasswordvalid form_login custom authentication_utils api authentication authorization symfony mobile-application

api - json_login - symfony token



Autenticación para una api de Symfony2(para uso de aplicaciones móviles) (3)

He desarrollado una API REST para mi aplicación Symfony2. Esta aplicación será utilizada por una aplicación móvil. Gran parte de la funcionalidad se realiza en el contexto del usuario autenticado actualmente, es decir:

$this->container->get(''security.context'')->getToken()->getUser()

Espero que la aplicación móvil pueda publicar en la acción de inicio de sesión como un formulario web tradicional. Si las credenciales se desprotegen, Symfony2 hace lo correcto y establece una cookie (¿esto funciona incluso en el contexto de una aplicación móvil que accede a una api?). Luego, las solicitudes de API posteriores de ese teléfono móvil (con suerte) funcionarán con el contenedor del servicio nativo symfony2 security.context.

¿Funcionaría esto? Necesito averiguar este proceso de autorización antes de llevar la API a los desarrolladores móviles. Si es posible, obviamente me gustaría poder usar el servicio nativo security.context en lugar de crear un nuevo sistema de autenticación para la api que usa xAuth o algo similar.

Gracias



Creo que deberías hacerlo sin estado (sin cookie).

Tuve el mismo problema, lo que hice:

  • en su app / config / security.yml, agregue:

security: ... firewalls: rest_webservice: pattern: /webservice/rest/.* stateless: true http_basic: provider: provider_name ...

  • Ahora puedes hacer una solicitud a tu servicio web:

class AuthTest extends WebTestCase { public function testAuthenticatedWithWebservice() { $client = $this->createClient(); // not authenticated $client->request(''GET'', ''/webservice/rest/url''); $this->assertEquals(401, $client->getResponse()->getStatusCode()); // authenticated $client->request(''GET'', ''/webservice/rest/url'', array(), array(), array( ''PHP_AUTH_USER'' => ''username'', ''PHP_AUTH_PW'' => ''password'' )); $this->assertEquals(200, $client->getResponse()->getStatusCode()); } }


Sí, Marc, jules está apuntando a un ejemplo solo para mostrarte cómo probar la autenticación con http_basic.

Para ser RESTful, debe evitar el uso de cookies, de lo contrario, simplemente llámelo API. Sobre qué tan seguro es su sistema de autenticación, puede usar http_digest a través de https o una solicitud más segura y firmada con el enfoque api_key / api_secret.

Eche un vistazo aquí http://wiki.zanox.com/en/RESTful_API_authentication