如何在Android应用程序中管理令牌认证

时间:2017-10-25 03:35:34

标签: android authentication android-volley jwt

我正在使用JWT来管理我的应用程序的服务器身份验证。我在服务器上管理它。在我的角度应用程序中,我使用angular-jwt来管理jwt。如果它过期了如何​​调用刷新令牌API。我正在使用凌空进行API调用。当令牌过期时,服务器以401错误代码响应。那段时间需要调用刷新令牌api。刷新调用后,我需要在没有任何用户输入的情况下再次调用先前的API调用。

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
                (method, request_url, null, new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {

                        try {
                            if (response.getInt("status") == 1) {
                                callback.onSuccessResponse(response.get("data"));
                            } else {
                                callback.onSuccessResponse(new JSONArray());
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {

                        NetworkResponse networkResponse = error.networkResponse;
                        if (networkResponse != null && networkResponse.statusCode == 401) {

                        }

                    }
                }) {

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                HashMap<String, String> headers = new HashMap<String, String>();
                String token = AppPreferencesHelper.getAccessToken(context);
                headers.put("Authorization", "Bearer " + token);
                return headers;
            }
        };

        Volley.newRequestQueue(context).add(jsonObjectRequest);

1 个答案:

答案 0 :(得分:0)

您需要调用api来验证令牌,如果它已过期而不是您可以生成新令牌。

或者如果你有登录功能,你可以在登录时检查JWT并在旧的过期时生成新的。

我在我的应用程序中使用了一种非常基本的方法,我使用每个用户的唯一电子邮件地址创建一个JWT,并将其存储在服务器的数据库中,它永不过期。每当用户注销时,我都会删除JWT,再次登录时我会生成新令牌。