如何在 Android 中打印受 Auth0-JWT 保护的私有 API 端点 JSON 对象?

Posted

技术标签:

【中文标题】如何在 Android 中打印受 Auth0-JWT 保护的私有 API 端点 JSON 对象?【英文标题】:How to print private API-endpoint JSON-objects - protected by Auth0-JWT in Android? 【发布时间】:2021-04-14 11:46:42 【问题描述】:

我有一个带有 NodejS 后端的 android 应用程序。后端提供了一个私有 API 端点,我已使用 Auth0 对其进行保护。

这是我的 NodeJS 代码:

app.get('/api/private', jwtCheck, function(req, res) 
  res.json(
    message: 'Hello World from private API-Endpoint!'
  );
);

要从 Android 应用程序调用我的私有 API,我使用了 code-samples from Auth0。

要从端点打印我的消息,我想使用此功能:

    private void print_private_api_message() 
    RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
    String url = "http://10.0.2.2:3000/api/private";

    JsonArrayRequest request = new JsonArrayRequest(com.android.volley.Request.Method.GET, url, null, new com.android.volley.Response.Listener<JSONArray>() 

        public void onResponse(JSONArray response) 
            try 
                JSONObject message_private = response.getJSONObject(0);
                String message_from_backend = message_private.getString("message");

                Toast.makeText(MainActivity.this, message_from_backend, Toast.LENGTH_SHORT).show();
             catch (JSONException e) 
                e.printStackTrace();
            

        
    , new com.android.volley.Response.ErrorListener() 
        public void onErrorResponse(VolleyError error) 
            error.printStackTrace();
        
    );
    queue.add(request);

我在这里调用这个函数:

            public void onResponse(@NotNull Call call, @NotNull final Response response) 
            runOnUiThread(new Runnable() 
                @Override
                public void run() 
                    if (response.isSuccessful()) 
                        Toast.makeText(MainActivity.this, "API call success!", Toast.LENGTH_SHORT).show();
                        print_private_api_message();
                     else 
                        Toast.makeText(MainActivity.this, "API call failed.", Toast.LENGTH_SHORT).show();
                    
                
            );
        

当我使用我的 Auth0 帐户登录并调用 API 时,我会收到 Toast 消息:API 调用成功,当我调用 print_private_api_message() 时,我的 NodeJS 控制台已登录 UnauthorizedError:未找到授权令牌。

所以,我的问题是:如何使用 accessToken 并从受保护的 API 端点打印消息?

【问题讨论】:

【参考方案1】:

您需要发送授权标头。您可以在以下问题中看到如何:How to send Authorization header in Android using Volley library?

你需要添加的部分是生成头:

@Override
            public Map<String, String> getHeaders() throws AuthFailureError 
                Map<String, String> headerMap = new HashMap<String, String>();
                headerMap.put("Content-Type", "application/json");
                headerMap.put("Authorization", "Bearer " + ACCESS_TOKEN);
                return headerMap;
            

【讨论】:

以上是关于如何在 Android 中打印受 Auth0-JWT 保护的私有 API 端点 JSON 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的应用程序中获取以前使用 android 打印服务的打印机列表?

成本调整单中出现单据受打印控制,不符合打印条件,不允许打印

如何保护从 OAuth 受保护资源中提取数据的 Android 应用程序

如何在 Android 中打印 HashMap 中的所有键和值?

如何在 android 中查找所有可用 WiFi 打印机的列表

如何在android源代码中打印出日志