在 Volley 请求中添加 JWT 令牌

Posted

技术标签:

【中文标题】在 Volley 请求中添加 JWT 令牌【英文标题】:Adding JWT Token in Volley Request 【发布时间】:2016-03-17 18:10:44 【问题描述】:

我在后端使用 Node.js,并且需要在 GET 请求的标头中发送一些参数(参数)和 jwt 令牌(用于授权)。 我在节点服务器上使用 express-jwt 模块。该请求需要在那里使用 jwt 令牌进行授权。简单地将令牌作为参数发送在那里不起作用。

    private void getInfo(final String instanceId, final String token) 
//token is jwt token
            StringRequest strReq = new StringRequest(Request.Method.GET,
                    Config.URL_GET_ID_INFO, new Response.Listener<String>() 

                @Override
                public void onResponse(String response) 
                    Log.d(TAG, response);

                    try 
                        JSONObject responseObj = new JSONObject(response);
                        boolean error = responseObj.getBoolean("error");
                        String message = responseObj.getString("message");
                        if (!error) 

                            Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();

                         else 
                            Toast.makeText(getApplicationContext(),
                                    "Error: " + message,
                                    Toast.LENGTH_LONG).show();
                        

                        // hiding the progress bar
                        //progressBar.setVisibility(View.GONE);

                     catch (JSONException e) 
                        Toast.makeText(getApplicationContext(),
                                "Error: " + e.getMessage(),
                                Toast.LENGTH_LONG).show();

                       // progressBar.setVisibility(View.GONE);
                    

                
            , new Response.ErrorListener() 

                @Override
                public void onErrorResponse(VolleyError error) 
                    Log.e(TAG, "Error: " + error.getMessage());
                    Toast.makeText(getApplicationContext(),
                            error.getMessage(), Toast.LENGTH_SHORT).show();
                    //progressBar.setVisibility(View.GONE);
                
            ) 
                @Override
                protected Map<String, String> getParams() 
                    Map<String, String> params = new HashMap<String , String>();
                    params.put("instanceId", instanceId);

                    //Need to send jwt along with params, but do not know how to include it in the request.
                    Log.e(TAG, "Posting params: " + params.toString());

                    return params;
                



            ;

            // Adding request to request queue
            MyApplication.getInstance().addToRequestQueue(strReq);
        

`

【问题讨论】:

您确定服务器不希望您的请求标头中包含令牌吗?在请求正文中发送令牌是相当不寻常的。通常你会做类似RequestObject.addHeader( "auth-token" , token ) 然后服务器端会验证const token = req.headers["token"]; //proceed to process token 【参考方案1】:

只需覆盖 Request 的方法 getHeaders()

这是一个例子:

@Override
        public Map<String, String> getHeaders() throws AuthFailureError 
            Map<String, String> params = new HashMap<String, String>();
            params.put("Authorization", "Bearer "+ yourToken);
            return params;
        

【讨论】:

我使用了这段代码,但是当我获得访问另一个列表的令牌时,它什么也没显示,请指导我解决这个问题

以上是关于在 Volley 请求中添加 JWT 令牌的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在 aws 中请求 jwt id 令牌时添加自定义数据吗

根据 JWT 身份验证令牌中的声明验证来自请求的 IP

在 json 对象参数 Volley post 中发送令牌头

Laravel - JWT Auth 无法从请求中解析令牌

ExpressJS / Angular 2 JWT 令牌

Spring过滤器将角色添加到来自令牌的请求