Pristup android aplikacije php apiu - autentifikacija

Treba da uradim par fajlova u php, tzv api, gde korisnik iz aplikacije treba preko tog apija da povlaci odredjene informacije iz mysql baze, da se registruje, upisuje i menja svoje podatke.
Nikada do sad nisam radio tu neku autentifikaciju, u ovom slucaju, u radu sa androidom, pa bih zamolio da mi neko pojasni kako se to radi, sta se salje iz apk php apiju da on proveri da je korisnik OK, pa da mu dozvoli da radi.
Jos nesto, treba omoguciti i korisnicima koj nemaju naloge, da koriste odredjene delove aplikacije, da pregledavaju sadrzaj i kontaktiraju vlasnike upisanih oglasa.
Da li taj api treba da ima i neki api key kojim vazi za sve, kako bi samo toj aplikaciji bilo dozvoljeno koriscenje tog apia?

Nisam nikada radio sa androidom, ali za ovaj slucaj vjerovatno najbolje rijesenje je token based auth - tacnije popularna je JWT Auth(JsonWebToken).

How JSON Web Tokens Work

A browser or mobile client makes a request to the authentication server containing user login information. The authentication server generates a new JWT access token and returns it to the client. On every request to a restricted resource, the client sends the access token in the query string or Authorization header. The server then validates the token and, if it’s valid, returns the secure resource to the client.

The authentication server can sign the token using any secure signature method. For example, a symmetric key algorithm such as HMAC SHA-256 can be used if there is a secure channel to share the secret key among all parties. Alternatively, an asymmetric, public-key system, such as RSA, can be used as well, eliminating the need for further key-sharing.

Imas jako mnogo tutoriala na ovu temu, i ovaj nacin je dosta popularan kod SPA, gdje je potrebna ta neka autentifikacija, a sve je API Based.

Najjednostavnije za android sto imas je firebase doslovno u par linija koda slozis login/register na androidu bez puno zeznacije…

Kod firebase imas i logiranje putem drustvenih mreza

Taj firebase je tek nepoznanica :slight_smile:
Postoji mysql baza, velika, od par stotine mb, pa bi se islo direktno u komunikaciji s njom.

Ha opcija je

1.) Rest api
2.) Jdbc

Di se bolje snalazis rest api je daleko bolji ako sto trebas detaljano samo napisi

Nisam radio ni u jednom, ali mi se cini da je taj rest api pristupacniji.
Ako moze neki primer, dobro bi doslo, ako ti vreme dozvoljava da napises, ako nije previse, ili ako imas nesto gotovo.
S primanjem, post, get, put i delete bih se snasao, formiranje jsona, samo taj ulazni deo authentification mi je problem.

class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {

@Override
protected void onPreExecute() {
super.onPreExecute();

}

@Override
protected Boolean doInBackground(String… urls) {
try {

    //------------------>>
    HttpGet httppost = new HttpGet("YOU URLS TO JSON");
    HttpClient httpclient = new DefaultHttpClient();
    HttpResponse response = httpclient.execute(httppost);

    // StatusLine stat = response.getStatusLine();
    int status = response.getStatusLine().getStatusCode();

    if (status == 200) {
        HttpEntity entity = response.getEntity();
        String data = EntityUtils.toString(entity);


        JSONObject jsono = new JSONObject(data);

        return true;
    }


} catch (IOException e) {
    e.printStackTrace();
} catch (JSONException e) {

    e.printStackTrace();
}
return false;

}

protected void onPostExecute(Boolean result) {

}

Sry na mobu sam pa nije ovo bas sad ljepo strukturirano :slight_smile: al evo otprilike

http://mobiledevtuts.com/android/android-http-with-asynctask-example/

Pogledaj i ovo

Wampir, super, hvala ti, pogledam ovih dana, pa javljam sta sam uradio.
Ukoliko neko ima jos neki primer, neka napise.
Zahvaljujem i @belimin na odgovoru!

najjednostavnije je da napravis open endpoint koji prima username i password kao post parametre a ti natrag vracas access_token i refresh_token kao neki hashevi (vracas podatke npr u json objektu)

Kada neko pokusava da pristupi nekom enpointu sa bilo koejg uredjaja (android, ios, web) npr www.example.com/api/articles u header polje stavi access token…ti uvijek na backend strani provjeravas access token i ako je validan za tog usera smatra se da je user logovan i vracas mu podatke.

U suprotnom vratis error 401 (Not authorised)…