J'implémente un service REST qui nécessite une authentification. J'utilise JWT .
Maintenant, l'application Android envoie une demande lors de la connexion, obtient un jeton et doit envoyer le jeton dans l'en-tête pour chaque demande suivante.
Ma question est de savoir comment stocker le jeton ou où dois-je le stocker?
Quelle serait la meilleure pratique pour le faire? Ou est-ce que j'y vais de la mauvaise façon?
J'ai trouvé ceci ans ici ( src )
Si vous écrivez une Android, par exemple, vous voudrez stocker tous les jetons d'accès dans SharedPreferences
(voici les documents API dont vous avez besoin pour le faire fonctionner). Si vous êtes un développeur iOS, vous souhaiterez stocker vos jetons d'accès dans le Keychain
.
Si vous utilisez le service REST et que vous souhaitez stocker JWT, le meilleur moyen disponible est SharedPreferences
. Vous devez stocker dans PrivateMode
pour des raisons de sécurité.SharedPreference
et SharedPreference.Editor
est utilisé pour stocker et récupérer JWT. JWT est récupéré après POST demande de nom d'utilisateur et de mot de passe
private void makeJsonRequest() {
String json_req = "json_req";
// String url = getContext().getString(R.string.LOGIN_URL);
String url="";
final JSONObject obj=new JSONObject();
try{
obj.put("username",name);
obj.put("password",pass);
}catch (JSONException e)
{
e.printStackTrace();
}
JsonObjectRequest req = new JsonObjectRequest(Request.Method.POST, url, obj,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
return headers;
}
};
AppController.getInstance().addToRequestQueue(req, json_req);
Pour récupérer JWT de la réponse et enregistrer dans les préférences partagées, utilisez
SharedPreferences prefs;
SharedPreferences.Editor edit;
prefs=getActivity().getSharedPreferences("myPrefs",Context.MODE_PRIVATE);
edit=prefs.edit();
try {
String saveToken=response.getString("token");
edit.putString("token",saveToken);
Log.i("Login",saveToken);
edit.commit();
}
catch (JSONException e)
{
e.printStackTrace();
}
Pour obtenir un jeton de SharedPreference
private void getToken() {
prefs=this.getActivity().getSharedPreferences("myPrefs",Context.MODE_PRIVATE);
String token = prefs.getString("token","");
}