Где хранить токен JWT?

Я реализую службу REST, требующую аутентификации. Я использую JWT.

Теперь приложение Android отправляет запрос при входе в систему, получает токен и отправляет токен в заголовке для каждого последующего запроса.

Мой вопрос в том, как хранить токен или где его хранить?

  • Общие настройки
  • База данных SQLite
  • В файле

Каким был бы лучший способ сделать это? Или я об этом совершенно неправильно?

Ответ 1

Я нашел, что это анс здесь (ЦСИ)

Например, если вы пишете приложение для Android, вы хотите сохранить все токены доступа в SharedPreferences (вот документы API, необходимые для его работы). Если вы являетесь разработчиком iOS, вам нужно будет хранить свои токены доступа в Keychain.

для IOS

для андроида

Ответ 2

Если вы используете службу REST и хотите сохранить JWT, лучший способ доступен SharedPreferences. Вы должны сохранить в PrivateMode для обеспечения безопасности.
SharedPreference и SharedPreference.Editor используется для хранения и извлечения JWT. JWT извлекается после запроса POST имени пользователя и пароля

 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);  

Чтобы получить JWT из ответа и сохранить в использовании общих предпочтений

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();
                        }  

Получить токен из SharedPreference

private void getToken() {
        prefs=this.getActivity().getSharedPreferences("myPrefs",Context.MODE_PRIVATE);
        token = prefs.getString("token","");
    }

Ответ 3

SharedPreferences устарела, а сейчас?