Где хранить токен 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 устарела, а сейчас?