2011-07-19 12 views
20

Desarrollé una API REST para mi aplicación Symfony2. Esta api será utilizada por una aplicación móvil. Gran parte de la funcionalidad se hace en el contexto del usuario actualmente autenticado, es decir:Autenticación para una aplicación Symfony2 (para aplicaciones móviles)

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

espero que la aplicación móvil será capaz de enviar a la acción de acceso al igual que un formulario web tradicional. Si las credenciales se activan, Symfony2 lo hace 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 de servicio symfony2 security.context nativo.

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

Gracias

Respuesta

13

creo que debería hacerlo sin estado (sin cookies).

que tenían el mismo problema, lo que hice:

  • en app/config/security.yml, añadir:
 
security: 
    ... 
    firewalls: 
     rest_webservice: 
      pattern: /webservice/rest/.* 
      stateless: true 
      http_basic: 
       provider: provider_name 
    ... 
  • Ahora usted puede hacer una solicitud para su webservice:
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()); 
    } 
} 
+0

Hmm interesante. No estoy seguro de seguir todo aquí. ¿Podría pasar por un caso de ejemplo completo? es decir, el usuario foo proporciona su nombre de usuario/contraseña a la aplicación móvil. La aplicación luego incluye ese nombre de usuario y contraseña con cada solicitud a la API? ¿En texto plano? ¿Eso es seguro? Lo siento si estoy mal entendiendo algo aquí! – Marc

+0

Como dondlero dijo que tiene que desactivar las cookies, es por eso que agregué el parámetro sin estado a verdadero. Personalmente, no me gusta la autenticación resumida porque es muy difícil de implementar. El método básico Http es fácil y funciona bien. nombre de usuario y contraseña son visibles en cada solicitud. Tienes que usar un certificado SSL. – julesbou

+0

Extraño, todavía estoy recibiendo encabezados 'Set-Cookie' incluso después de configurar' stateless: true'. ¿Alguna idea de por qué podría suceder eso? –

3

Sí Marc, jules apunta a un ejemplo para mostrarle cómo probar la autenticación con http_basic.

Para que sea RESTANTE, debe evitar el uso de cookies; de lo contrario, simplemente llámelo API. Acerca de cuán seguro es su sistema de autenticación, puede ir con http_digest sobre https o con más solicitud firmada segura con el método api_key/api_secret.

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

Cuestiones relacionadas