【发布时间】:2018-08-24 12:55:47
【问题描述】:
我正在尝试使用我在 .NET Framework 中构建的 Web API,它使用令牌身份验证系统。这些 API 正在使用 Volley 在 Android 中使用。
所以这些 API 在 postman 中测试时可以完美运行,所以我将按照我在 Android 中使用的代码分享 postman 配置的屏幕截图。
public static void authorizeAPIClient(final String username, final String password, RequestQueue requestQueue){
StringRequest stringRequest = new StringRequest(Request.Method.POST,
apiPath + "api/authorise/token",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
MainActivity.getToken(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
public String getBodyContentType() {
return "application/x-www-form-urlencoded; charset=UTF-8";
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("grant_type", "password");
params.put("username", username);
params.put("password", password);
return params;
}
};
requestQueue.add(stringRequest);
}
所以这部分工作得很好,我能够从 JSON 中提取令牌,甚至使用邮递员测试在 Android 设备上接收到的令牌,它工作得很好。我对此感到奇怪的是,我使用getParams() 将用户名和密码传递给它,而在邮递员中我需要通过表单来完成。
现在我们已经从服务器获得了一个令牌并确定它可以工作,我尝试调用另一个需要令牌的函数。
public static void getUserDetails(final String userId, final String token, RequestQueue requestQueue){
StringRequest stringRequest = new StringRequest(Request.Method.GET,
apiPath + "API/points/getUserDetails",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("API", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("API", error.toString());
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("UserId", userId);
return params;
}
@Override
public Map<String, String> getHeaders(){
Map<String, String> params = new HashMap<String, String>();
params.put("Authorization", "Bearer " + token);
return params;
}
};
requestQueue.add(stringRequest);
调用此函数时,我收到以下错误之一,具体取决于我传递参数和标头的方式:
com.android.volley.ServerErrorcom.android.volley.AuthFailureError
我不确定哪个错误先出现,即它是否会在 AuthFailureError 之前或之后引发服务器错误,因此很难确定它是否曾经授权或 URL 参数是否正确传递。
有谁知道我做错了什么,我一直在通过 StackOverFlow 搜索,但对我没有任何帮助。
另外,很抱歉所有的黑衬里,敏感信息:D
【问题讨论】:
标签: android asp.net-web-api android-volley token