gpt4 book ai didi

android - 如何使用 JWT token 发送 HTTP 请求以从 android 中的 cookie 存储进行身份验证

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:36 26 4
gpt4 key购买 nike

到目前为止我做了什么:

我正在尝试与具有自定义身份验证的 Java Web 应用程序通信。在那,我需要先点击请求主体参数 JSON 类型的链接来获取 JWT auth-token 在我的 cookie 中。

我已经在 Postman 中测试了连接,我收到了正确的 JSON 响应。但是当我在我的 android 应用程序中尝试相同时,它返回 Bad Request 错误。

对于 Postman 测试:

用于登录并在 cookie 存储中获取 auth-token:

  • 帖子,网址:http://iitjeeacademy.com/iitjeeacademy/api/v1/login
  • header :Content-Type:application/json
  • 请求正文(原始):{"password":"123","type":"student","email":"shobhit@gmail.com"}

登录后使用:

  • 获取,网址:http://iitjeeacademy.com/iitjeeacademy/api/v1/student/me

存储在 Postman 中的 cookie 的屏幕截图: Postman screenshot of stored cookie

存储在 Chrome 中的 cookie 的屏幕截图 enter image description here

以下是我在android中的HttpURLConnection请求代码:

“Post”方法,此连接用于获取auth-token此方法返回 200 响应。

HttpURLConnection connection = null;
try {
// Created URL for connection.
URL url = new URL(link);

// Input data setup
byte[] postData = request.getBytes(StandardCharsets.UTF_8);
int postDataLength = postData.length;

// Created connection
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("charset", "utf-8");
connection.setRequestProperty("Content-Length", Integer.toString(postDataLength));
connection.setUseCaches(false);

// loaded inputs
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.write(postData);
wr.flush();
wr.close();

// getting a response
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK){
// Read response
response = convertToString(connection.getInputStream());
return response;
}else{
// Read Error
String response = connection.getResponseMessage();
return response;
}
} catch (MalformedURLException e) {
e.printStackTrace();
Log.v("MalformedURL ---> ", e.getMessage());
} catch (ProtocolException p) {
p.printStackTrace();
Log.v("Connection ---> ", p.getMessage());
} catch (IOException i) {
i.printStackTrace();
Log.v("IO Exception ---> ", i.getMessage());
} finally {
connection.disconnect();
}

“获取”方法, session cookie中必须有auth-token才能得到响应。 此方法给出 401 未经授权的错误。

HttpURLConnection connection = null;
try{
// Created URL for connection
URL url = new URL(link);

// Created connection
connection = (HttpURLConnection) url.openConnection();
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("GET");
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("charset", "utf-8");

// getting a response
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK){
response = convertToString(connection.getInputStream());
return response;
}else{
// Read Error
String response = connection.getResponseMessage();
return response;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException p) {
p.printStackTrace();
} catch (IOException i) {
i.printStackTrace();
} finally {
connection.disconnect();
}

问题:如何使用存储在 HttpURLConnection android 中的 cookie 中的 JWT token 来获取 Web 服务的响应。

最佳答案

我确定你已经继续前进,但是......

对于 JWT 身份验证,我会发送一个格式如下的 HTTP 请求 header:

Authorization: Bearer jwtHeader.jwtPayload.jwtSignature

示例:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

有关规范和详细信息,请访问:https://jwt.io/introduction/

关于android - 如何使用 JWT token 发送 HTTP 请求以从 android 中的 cookie 存储进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32586990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com