2012-04-13 15 views
10

Estoy diseñando una API para una aplicación móvil, y espero mantenerla RESTful.
Las API están autorizadas mediante autenticación HTTP básica, sin embargo, cuando el usuario abre la aplicación por primera vez, necesita iniciar sesión primero, por lo que debo diseñar una API para verificar las credenciales del usuario, que aceptará un nombre de usuario y contraseña, devuelve el éxito o falla en consecuencia.
el problema es qué debería ser la url así que es tranquilo? No creo/inicio de sesión es bueno.¿Cómo diseñar una API RESTful para verificar las credenciales del usuario?

Respuesta

6

Un buen enfoque es realizar una solicitud GET para la información de cuenta/perfil del usuario actual. y hacer que devuelva el nombre de usuario, la configuración, la url de avatar, etc. me es un identificador de taquigrafía que se utiliza con frecuencia del usuario que realiza la autenticación.

GET https://api.example.com/profiles/me 
HTTP/1.1 200 OK 
{ 
    "username": "bob", 
    "id": "xyz", 
    "created_at": 123, 
    "image_url": "https://example.com/bob.png" 
} 
5

de Wikipedia:

La comunicación cliente-servidor es aún menor debido ningún cliente contexto se almacenan en el servidor entre las peticiones. Cada solicitud desde cualquier cliente contiene toda la información necesaria para atender la solicitud , y cualquier estado de sesión se guarda en el cliente.

Debido a que el servidor almacena ningún estado de sesión del cliente, su API no debería exponer ninguna capacidad de conexión/desconexión: En cada petición debe enviar las credenciales de usuario y el servidor de ellas debe validar cada vez.

Compruebe this discussion in SO, claryfies este concepto.

0

Estoy de acuerdo con Carlos: en una API normal y tranquila, no hay sesión, por lo que no puede autenticarse una vez y volver a usar la sesión, en realidad necesitaría pasar el conjunto de credenciales en cada llamada (no ideal).

En este escenario, parece que sería mejor usar uno de los openAuth (http://www.oAuth.net) - esto funciona autenticando cuando la aplicación se ejecuta por primera vez y luego generando un token de acceso para permitir acceso dentro de cada llamada (+ un token de actualización).

(se podría argumentar que el token de acceso es el estado, lo que es, sin embargo, al menos en general es mucho más duradero).

+0

Sí, SOY la credencial establecida en cada llamada, sin embargo, necesito un inicio de sesión para verificar la credencial del usuario cuando abrieron la aplicación por primera vez – wong2

+0

en realidad, no guardé una cookie de sesión ni nada parecido eso – wong2

+0

Ok - así que supongo que debe estar pasando las credenciales * nombre de usuario/contraseña * con cada llamada es correcta. Usted necesita siempre pasarlo o pasarlo una vez y la pista de la sesión. – steve

6

Por lo general, se considera una práctica deficiente para pasar datos confidenciales mediante una solicitud de HTTP GET.

La información de contraseñas es información sensible y es una de las excepciones que infringe la regla de que idempotent operations debe ser solicitudes.

¿Por qué es esto una excepción? El historial del navegador y los registros del servidor almacenarán las solicitudes GET. Lo que significa que esta información sensible es visible como texto sin formato en ambos lugares. Entonces, si alguien se apodera de cualquiera de los dos, esa información ahora está en sus manos.

Debe usar una solicitud HTTP POST para pasar esta información confidencial a la API RESTful ya que los navegadores no las almacenarán y los servidores no las registrarán. Sin embargo, la primera línea de defensa es usar HTTP seguro (HTTPS) para garantizar que esta información esté protegida de terceros.

Así que pase esta información en el cuerpo de una solicitud HTTP a una URL HTTPS.

0

GET https://api.example.com/auth

Con juego de cabecera de Autorización.

Cuestiones relacionadas