Java 来自android应用程序的JWT身份验证
我是Android开发的新手,需要打电话到HTTP服务器上传图像。在此之前,用户使用用户名和密码登录,并返回JWT令牌和用户id。在图像上载功能中,我需要提供令牌和id,以便服务器在验证会话后接受图像,这就是我遇到问题的地方 我不确定问题是否存在于图像上传或会话验证中,尽管从错误消息来看,这似乎是第二种情况 功能如下:Java 来自android应用程序的JWT身份验证,java,android,apache,oauth-2.0,jwt,Java,Android,Apache,Oauth 2.0,Jwt,我是Android开发的新手,需要打电话到HTTP服务器上传图像。在此之前,用户使用用户名和密码登录,并返回JWT令牌和用户id。在图像上载功能中,我需要提供令牌和id,以便服务器在验证会话后接受图像,这就是我遇到问题的地方 我不确定问题是否存在于图像上传或会话验证中,尽管从错误消息来看,这似乎是第二种情况 功能如下: public String sendPostMult(String myurl, String token, List<ValuePair> params, Bitm
public String sendPostMult(String myurl, String token, List<ValuePair> params, Bitmap bm) throws Exception {
try {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(myurl);
post.addHeader("Authorization", "Token token=\"" + token + "\"");
MultipartEntityBuilder postEntity = MultipartEntityBuilder.create();
ByteArrayOutputStream bao = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 90, bao);
byte[] ba = bao.toByteArray();
String ba1 = Base64.encodeToString(ba, Base64.DEFAULT);
// File file = new File("Your File path on SD card");
// postEntity.addPart("fileupload", new FileBody(file, "image/jpeg"));
for (ValuePair param : params) {
postEntity.addTextBody(param.getValue(), param.getName());
Log.d(param.getValue(), param.getName());
}
postEntity.addTextBody("client_assertion_type", "urn:ietf:params:oauth:client-assertion-type:jwt-bearer");
postEntity.addTextBody("client_assertion", token);
postEntity.addTextBody("picture", ba1);
// Log.d("YY", getBytesFromBitmap(bm).toString());
post.setEntity(postEntity.build());
HttpResponse response = client.execute(post);
int responseCode = response.getStatusLine().getStatusCode();
BufferedReader reader = new BufferedReader(new InputStreamReader(
response.getEntity().getContent(), "UTF-8"));
String sResponse = reader.readLine();
return sResponse;
}catch(Exception e)
{
e.printStackTrace();
return "ERROR";
}
}
因此,这似乎确实是一个jwt错误。如果我移除
post.addHeader("Authorization", "Token token=\"" + token + "\"");
行,错误显示:必须提供授权标头
因此,我的问题是:
1) 授权标头是否正确?还是应该采用另一种格式
2) 如何通过JWT?我收到了一个字符串形式的令牌,我想这就是我需要传递的。然而,当我收到令牌时,它确实包含几个字段,我将这些字段解析为不同的字符串,令牌就是其中之一。所以,也许我应该保存整个内容并将其全部发送到客户机断言字段?但我是否仍应仅在授权标头中发送令牌
3) 虽然有点不相关,但可能是我发送的图像格式错误吗
非常感谢您抽出时间。我真的很感激 看看JWT,你的问题就在那里。它不是JWT令牌 JWT由三部分组成:
。
。您的仅包含
。我怀疑您有JWS(JSON Web签名)而不是JWT(JSON Web令牌)
您可以在规范中阅读有关格式的信息:
如果需要对令牌进行故障排除,这是一个有用的工具:
此外,像您这样在声明中发送密码似乎是一件倒退的事情,即使它是加密的。JWT不是向每个服务发送密码。服务通过验证签名来信任内容。如果您想知道JWT的样子:{“令牌”:“EYJ0Exiaioijkv1qiljhijiuzi1nij9.EYJLbwfpbci6im9saubvgbgkuy29tiiwicgfzc3dvcmqioiiiijmwkdukzevpymhruzllmwrw9wtu5wndrli5rr1vimwnfu9hawk9hawqpNqwdstbrstbrsbfRk8ilcjfawqoi1和vymyzmyzm5yzmzmzm5zmotjfx3yioj9.vopftns4wffg9.wfg9.wfgͬ”dupxc9;“dupxc9c9c9c9c9c9c9c9c9c9c9c9c9f5”;“vjjjjjjjjj
post.addHeader("Authorization", "Token token=\"" + token + "\"");