Я пытаюсь использовать веб-API, встроенный в .NET Framework, в котором используется система аутентификации токена. Эти API используются в Android с использованием Volley.
Так что эти API отлично работают при тестировании в почтальоне, поэтому я собираюсь поделиться скриншотом конфигурации почтальона, следуя коду, который я использую в Android.
![Token auth postman](https://i.stack.imgur.com/73Rcj.png)
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()
, чтобы передать ему имя пользователя и пароль, в то время как в почтальоне мне нужно сделать это через форму.
Теперь, когда мы получили токен с сервера и установили, что он работает, я пытаюсь вызвать другую функцию, для которой требуется токен.
![Get User Details](https://i.stack.imgur.com/A4cSB.png)
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.ServerError
com.android.volley.AuthFailureError
Я не уверен, какая ошибка возникнет первой, т. Е. Может ли она вызвать ошибку сервера до или после AuthFailureError
, поэтому трудно определить, авторизуется ли он когда-либо или правильно переданы параметры URL.
Кто-нибудь знает, что я делаю неправильно, я искал StackOverFlow и у меня ничего не получалось.
Также, извините за всю черную подкладку, секретная информация: D