web-dev-qa-db-fra.com

Où stocker un jeton JWT?

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?

  • Préférences partagées
  • Base de données SQLite
  • Dans un fichier

Quelle serait la meilleure pratique pour le faire? Ou est-ce que j'y vais de la mauvaise façon?

24
mbtamuli

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.

pour ios

pour Android

14
chandan

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","");
    }
13
Satya