在哪里存储 JWT 令牌?
Posted
技术标签:
【中文标题】在哪里存储 JWT 令牌?【英文标题】:Where to store a JWT token? 【发布时间】:2016-03-15 11:43:56 【问题描述】:我正在实现一个需要身份验证的 REST 服务。我正在使用JWT。
现在 android App 在登录时发送请求,获取令牌,并且必须在每个后续请求的标头中发送令牌。
我的问题是,如何存储令牌,或者我应该将它存储在哪里?
共享首选项 SQLite 数据库 在文件中最佳实践方法是什么?还是我的做法完全错误?
【问题讨论】:
你找到答案了吗? 不。我只是将它存储在共享首选项中。 reddit (reddit.com/r/androiddev/comments/470h8a/…) 对此进行了很好的讨论 【参考方案1】:如果您使用 REST 服务并希望存储 JWT,可用的最佳方式是 SharedPreferences
。出于安全考虑,您应该存储在 PrivateMode
。SharedPreference
和 SharedPreference.Editor
用于存储和检索 JWT .在用户名和密码的 POST 请求后检索 JWT
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 中获取 Token
private void getToken()
prefs=this.getActivity().getSharedPreferences("myPrefs",Context.MODE_PRIVATE);
String token = prefs.getString("token","");
【讨论】:
这不仅为我回答了同样的问题,我希望前几天我在弄清楚如何将 JSON POST 请求发送到 REST API 时能找到它。好东西。【参考方案2】:我在这里找到了这个答案 (src)
例如,如果您正在编写一个 Android 应用程序,您需要将所有访问令牌存储在 SharedPreferences
中(这里是您需要使其工作的 API 文档)。如果您是 ios 开发人员,您会希望将访问令牌存储在 Keychain
中。
for ios
for android
【讨论】:
root 设备怎么样?特别是安卓?还安全吗?以上是关于在哪里存储 JWT 令牌?的主要内容,如果未能解决你的问题,请参考以下文章
我在哪里可以将 jwt 令牌存储在 localStorage 中?
在 Django REST 框架中使用 JWT 时,刷新令牌和访问令牌存储在哪里?