【问题标题】:How to get device Access token and perform multiple HTTP POST Request如何获取设备访问令牌并执行多个 HTTP POST 请求
【发布时间】:2020-10-28 13:13:01
【问题描述】:

我目前正在使用 IoT 平台“Thingsboard”开展一个项目,在该平台上我创建了多个设备,并且我想从 JSON 文件向每个设备发送数据,我正在使用 Rest Api 来执行这个请求,但是我一直在苦苦挣扎如何获取我的设备的 access token 并解析它们中的每一个我的请求作为标头参数。我只是通过使用 Curl 手动完成,但我现在想自动完成。我知道 Thingsboard 有一个用 java (https://thingsboard.io/docs/reference/rest-client/) 编写的 Rest 客户端 Api,所以我尝试在我的脚本中使用它,但我没有工作。我是使用 Rest Api 的新手,所以如果有人能给我一个线索,那将非常有帮助。

这是我的请求代码的一部分:

                private static String token;
         public String getToken() {
                return token;
            }

                String paramValue = "param\\with\\backslash";
                String yourURLStr = "http://host.com?param=" + java.net.URLEncoder.encode(paramValue, "UTF-8");

                URL url2 = new URL("https://demo.thingsboard.io/api/v1/token/telemetry?token=$JWT_TOKEN");
                HttpsURLConnection conn = (HttpsURLConnection) url2.openConnection();
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-Type", "application/json");
                conn.setRequestProperty("Accept", "application/json");
                conn.setRequestProperty(JWT_TOKEN_HEADER_PARAM, "Bearer" +token);

                conn.setDoOutput(true);
                OutputStream outStream = conn.getOutputStream();
                OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
                outStreamWriter.write(list.toString());
                outStreamWriter.flush();
                outStreamWriter.close();
                outStream.close();
                String response = null;

                System.out.println(conn.getResponseCode());
                System.out.println(conn.getResponseMessage());

                DataInputStream input1 = null;
                input1 = new DataInputStream (conn.getInputStream());
                while (null != ((response = input1.readLine()))) {
                    System.out.println(response);
                    input1.close ();
                }
            }
            
            catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ParseException e) {
                e.printStackTrace();
            }

【问题讨论】:

标签: java api rest jwt thingsboard


【解决方案1】:

如果您试图让 JWT-token 进行身份验证,则以下 java 应该可以工作:

Request request = Request.Post("http://THINGSBOARD_URL/api/auth/login");
String body = "{\"username\":\"tenant@thingsboard.org\", \"password\":\"tenant\"}";
request.bodyString(body,ContentType.APPLICATION_JSON);
request.setHeader("Content-Type", "application/json");
request.setHeader("Accept", "application/json");
HttpResponse httpResponse = request.execute().returnResponse();
System.out.println(httpResponse.getStatusLine());
if (httpResponse.getEntity() != null) {
    String html = EntityUtils.toString(httpResponse.getEntity());
    System.out.println(html);
}

不要混淆用于租户身份验证的 JWT-Token 和用于设备身份验证的 Access-Token。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2015-02-13
    • 2015-11-14
    • 2020-04-13
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多