2012-07-01 22 views
5

Así que estoy haciendo una aplicación para Android que necesita un back-end web. El sitio web está siendo desarrollado en Ruby on Rails. Tiene un lado orientado hacia el cliente (páginas HTML bonitas) pero también quiero que pueda servir información a mi aplicación Android a través de JSON. Sin embargo, no quiero que todo el mundo pueda obtener este JSON, ya que contiene información posiblemente peligrosa. ¿Cómo bloqueo las páginas con formato JSON y aún las hago accesibles desde la aplicación de Android?¿Cómo crear una Api REST de Rails segura para mi aplicación?

Para que conste, estoy usando Rails 3.1 has_secure_password para la autenticación del usuario en el sitio, y me gustaría tener algunas rutas que están abiertos para peticiones HTML, pero bloqueado por JSON (por ejemplo, el /users url debe ser accesible como HTML pero como JSON solo debería poder accederse desde mi aplicación con algún método de seguridad).

¿Hay alguna manera de hacer esto, o la API tiene que ser una aplicación separada (que sería enormemente inconveniente con la configuración de base de datos, etc.)?

ACLARACIÓN: Básicamente lo que quiero hacer es crear una API JSON basada en tokens segura de mi aplicación Rails, y no quiero usar Devise o algo que me obligue a cambiar la forma en que ya estoy almacenando mi información de usuario/pase.

Respuesta

2

Según la versión de los rieles que esté utilizando, parte del trabajo ya está hecho con el método responder_, que le permite servir tanto JSON como HTML para la misma url. Ahora, para bloquear el acceso JSON, se podría definir un método que verifica el acceso de aplicaciones, y llamarlo siempre que sirve la respuesta JSON

def with_access_check() 
    if allowed # Or any verification you want. 
    yield 
    else 
    # Raise a 403 maybe? 
    end 
end 

# Then in every method that needs a check: 
respond_to :json { with_access_check { render :json => @stuff } } 

Por último, a menos que usted está sirviendo muy diferentes datos sobre la JSON y html vistas (lo cual es extraño si usa la misma URL para ambos), considere que nada puede impedir que un atacante/usuario malintencionado extraiga los mismos datos de su HTML.

Cuestiones relacionadas