Вход в Android Retrofit 2 с помощью Oauth 2.0 - Spring Boot Backend - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь войти и получить токен, используя модификацию 2, из моего API, который использует Spring Boot 2.

Проблема, с которой я столкнулся, заключается в том, что она работает в Postman, но я получаю 403код состояния в Android.

Это код, который я использую в Почтальоне:

Postman setup

Я пробовал это двумя способами,но я получаю тот же код состояния 403:

Класс TokenResponse:

public class TokenResponse {
    @SerializedName("token_type")
    @Expose
    private String tokenType;
    @SerializedName("access_token")
    @Expose
    private String accessToken;

    public String getTokenType() {
        return tokenType;
    }

    public void setTokenType(String tokenType) {
        this.tokenType = tokenType;
    }

    public String getAccessToken() {
        return accessToken;
    }

    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }
}

Служба (два способа, которые я пробовал):

  @POST("/oauth/token/")
    @FormUrlEncoded
    Call<TokenResponse> getToken(@Field("client_id") String clientId,
                                 @Field("client_secret") String clientSecret,
                                 @Field("grant_type") String grantType,
                                 @Field("username") String username,
                                 @Field("password") String password);
    @FormUrlEncoded
    @POST("/oauth/token/")
    Call<TokenResponse> getToken2(@Field("grant_type") String grantType,
                                 @Field("username") String username,
                                 @Field("password") String password,
                                 @Header("Authorization") String authorization);

И классгде я делаю запрос (также с двумя способами, которые я пробовал):

private void oauth2Example() {
        Retrofit.Builder builder = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl("http://ip:8080");

        Retrofit retrofit = builder.build();

        UserService service = retrofit.create(UserService.class);

        //way number one
        byte[] credentials = "androidapp:12345".getBytes();
        String basicAuth = "";
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            basicAuth = "Basic " + Base64.getEncoder().encodeToString(credentials).trim();
        }
        Call<TokenResponse> call = service.getToken2("password", "j@h.com", "12345", basicAuth);
      //FINISH way number 1

        //way number two
        Call<TokenResponse> call = service.getToken("androidapp", "12345", "password", "j@h.com", "12345");
       //FINISH way number 2

       //RESULT
        call.enqueue(new Callback<TokenResponse>() {
            @Override
            public void onResponse(Call<TokenResponse> call, Response<TokenResponse> response) {
                if (response.isSuccessful()){
                    Toast.makeText(PostActivity.this, response.body().getAccessToken(), Toast.LENGTH_SHORT).show();
                }else {
                    Toast.makeText(PostActivity.this,"error " + response.code(), Toast.LENGTH_SHORT).show();
                }

            }

            @Override
            public void onFailure(Call<TokenResponse> call, Throwable t) {
                Toast.makeText(PostActivity.this, t.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }

Как вы можете видеть, я прокомментировал два способа, которые я пытаюсь (я не использую одну и ту же переменную "call")во время, конечно), но в обоих случаях, как я уже сказал, я получаю ошибку 403.

Что я должен изменить, чтобы получить токен на предъявителя, который я могу получить от Почтальона, ноЯ просто получаю 403 в Android?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...