存储JWT令牌的位置?

mbt*_*uli 19 security android jwt

我正在实现需要身份验证的REST服务.我正在使用JWT.

现在,Android App在登录时发送请求,获取令牌,并且必须在每个后续请求的标头中发送令牌.

我的问题是,如何存储令牌,或者我应该在哪里存储它?

  • 共享首选项
  • SQLite数据库
  • 在一个文件中

这样做的最佳做法是什么?或者我是以完全错误的方式来做这件事的?

小智 12

如果您正在使用REST服务并希望存储JWT,那么最好的方法是SharedPreferences.您应该存储以PrivateMode确保安全性.
SharedPreferenceSharedPreference.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);  
Run Code Online (Sandbox Code Playgroud)

从响应中检索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();
                        }  
Run Code Online (Sandbox Code Playgroud)

从SharedPreference获取令牌

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

  • 这不仅为我解答了同样的问题,我希望有一天当我在研究如何将 JSON POST 请求发送到 REST API 时能找到它。好东西。 (2认同)

cha*_*dan 11

我在这里找到了这个ans(src)

例如,如果您正在编写Android应用程序,则需要存储所有访问权限SharedPreferences(这里是您需要的API文档才能使其工作).如果您是iOS开发人员,则需要将访问权限存储在Keychain.

对于ios

对于Android

  • 获得 root 权限的设备怎么样?特别是安卓?还安全吗? (2认同)