2012-07-01 15 views
5

Quindi sto creando un'app per Android che necessita di un back-end web. Il sito Web viene creato in Ruby on Rails. Ha un lato client (piuttosto pagine HTML) ma voglio anche che sia in grado di fornire informazioni alla mia app per Android tramite JSON. Tuttavia, non voglio che tutto il mondo sia in grado di ottenere questo JSON poiché contiene alcune informazioni potenzialmente pericolose. Come posso bloccare le pagine in formato JSON e renderle comunque accessibili dall'app per Android?Come creare un Rails Rails Api sicuro per la mia app?

Per la cronaca, io sto usando Rails 3.1 has_secure_password per l'autenticazione degli utenti in loco, e mi piacerebbe avere alcune rotte che sono aperti per le richieste di HTML, ma bloccato per JSON (per esempio, l'URL /users deve essere accessibile come HTML ma come JSON dovrebbe essere accessibile dalla mia app solo con qualche metodo di sicurezza).

C'è un modo per farlo, o l'API deve essere un'app separata (che sarebbe enormemente scomoda con l'installazione del DB, ecc.)?

PRECISAZIONE: Fondamentalmente quello che voglio fare è creare una sicura basata su token JSON API dalla mia applicazione Rails, e io non voglio usare Devise o qualcosa che mi costringerà a cambiare come sto già la memorizzazione mia informazioni utente/pass.

risposta

2

A seconda della versione di rota che si sta utilizzando, parte del lavoro è già stata eseguita con il metodo respond_to, che consente di pubblicare sia JSON che HTML per lo stesso url. Ora, per bloccare l'accesso JSON, è possibile definire un metodo che controlla l'accesso app, e chiamarlo ogni volta che serve la risposta 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 } } 

Infine, a meno che non si sta servendo di dati molto diversi sulla JSON e html le visualizzazioni (che è strano se si utilizza lo stesso URL per entrambi) considerano che nulla può impedire a un utente malintenzionato/malintenzionato di estrarre gli stessi dati dal codice HTML.

Problemi correlati