Аутентификация Apollo Graphql для Android - PullRequest
0 голосов
/ 21 сентября 2018

Я занимаюсь разработкой приложения для Android, которое использует GraphQL в качестве серверной части.У меня отлично работает запрос и часть мутаций.Но я не могу найти никаких документов для аутентификации.

Так как я могу передать имя пользователя и пароль на сервер и аутентифицировать его?

LocalApolloClient.java:

public class LocalApolloClient {
    private static final String URL = "http://192.168.1.100/graphql/";
    private static ApolloClient apolloClient;
    private static String authHeader = "";


    public static ApolloClient getApolloClient(){
        //HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        //loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(chain -> {
                    Request original = chain.request();
                    Request.Builder builder = original.newBuilder().method(original.method(), original.body());
                    builder.header("Authorization", authHeader);
                    return chain.proceed(builder.build());
                })
                .build();

        apolloClient = ApolloClient.builder()
                .serverUrl(URL)
                .okHttpClient(okHttpClient)
                .build();

        return apolloClient;
    }
}

Обратите внимание:

  • Это не повторяющийся вопрос
  • Нет надлежащей документации для graphQl

Так что, пожалуйста, обоснуйте, если вы проголосовали отрицательно.

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Попробуйте это

  1. HTTP-сервер можно настроить как HTTPS-сервер
  2. На сервере также есть база данных имени пользователя / пароля (пароли могутбыть сохраненным с помощью bcrypt)
  3. Клиент открывает HTTPS-соединение, аутентифицирует сервер (поэтому требуется сертификат сервера) и после обмена главным ключом соединение должно быть зашифровано.
  4. клиент отправляет имя пользователя / пароль в открытом виде на сервер
  5. Сервер запускает bcrypt для пароля и сравнивает его с тем, который хранится в базе данных

Если у вас есть какие-либобеспокойство см. это оригинальный пост.

NB: Я лично никогда не пробовал это.

0 голосов
/ 03 июля 2019

Вам нужно установить заголовок на ApolloClient, а не на OkHttpClient.Как то так:

ApolloClient.builder()
            .serverUrl(context.getString(R.string.graphql_base_url))
            .addApplicationInterceptor(object: ApolloInterceptor {
                override fun interceptAsync(
                    request: ApolloInterceptor.InterceptorRequest,
                    chain: ApolloInterceptorChain,
                    dispatcher: Executor,
                    callBack: ApolloInterceptor.CallBack
                ) {
                    val newRequest = request.toBuilder().requestHeaders(RequestHeaders.builder().addHeader("Authorization", "Basic ...").build()).build()
                    chain.proceedAsync(newRequest, dispatcher, callBack)
                }

                override fun dispose() {
                }
            }).build()
0 голосов
/ 09 февраля 2019

Если вы хотите пройти аутентификацию с использованием имени пользователя и пароля, вам нужно кодировать base64 имя пользователя и пароль и передавать его в переменную authHeader.Например, для имени пользователя Aladdin и пароля OpenSesame вы получите следующее:

private static String authHeader = "Basic QWxhZGRpbjpPcGVuU2VzYW1l";

См .: https://en.wikipedia.org/wiki/Basic_access_authentication

...