【问题标题】:Where to store a JWT token?在哪里存储 JWT 令牌?
【发布时间】:2016-03-15 11:43:56
【问题描述】:

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

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

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

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

最佳实践方法是什么?还是我的做法完全错误?

【问题讨论】:

标签: android security jwt


【解决方案1】:

如果您使用 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);  

要从响应中检索 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 设备怎么样?特别是安卓?还安全吗?
猜你喜欢
  • 2019-04-25
  • 2020-11-22
  • 2021-03-12
  • 2019-02-06
  • 2018-07-17
  • 2020-09-08
  • 2020-08-22
  • 2018-06-08
  • 2014-10-28
相关资源
最近更新 更多