我正在实现需要身份验证的REST服务.我正在使用JWT.
现在,Android App在登录时发送请求,获取令牌,并且必须在每个后续请求的标头中发送令牌.
我的问题是,如何存储令牌,或者我应该在哪里存储它?
共享首选项
SQLite数据库
在一个文件中
这样做的最佳做法是什么?或者我是以完全错误的方式来做这件事的?
如果您正在使用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() { @Override public void onResponse(JSONObject response) { } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }) { @Override public Map getHeaders() throws AuthFailureError { Map 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",""); }
我在这里找到了这个ans(src)
例如,如果您正在编写Android应用程序,则需要存储所有访问权限SharedPreferences
(这里是您需要的API文档才能使其工作).如果您是iOS开发人员,则需要将访问权限存储在Keychain
.
对于ios
对于Android