身份验证Apollo Graphql for android

须知少年凌云志,曾许人间第一流。这篇文章主要讲述身份验证Apollo Graphql for android相关的知识,希望能为你提供帮助。
我正在开发一个使用GraphQL作为后端的android应用程序。我有查询和变异部分完美的工作。但是我找不到任何用于身份验证的文档。
那么如何将用户名和密码传递给服务器并对其进行身份验证呢?
local Apollo client.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; } }

【身份验证Apollo Graphql for android】请注意 :
  • 这不是一个重复的问题
  • graphQl没有适当的文档
如果你投反对票,请善意。
答案您需要在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()

另一答案如果要使用用户名和密码进行身份验证,则必须使用base64编码用户名和密码并将其传递给变量authHeader。例如,对于用户名Aladdin和密码OpenSesame,你得到这个:
private static String authHeader = "Basic QWxhZGRpbjpPcGVuU2VzYW1l";

见:https://en.wikipedia.org/wiki/Basic_access_authentication
另一答案试试这个
  1. HTTP服务器可以设置为HTTPS服务器
  2. 服务器还有用户名/密码数据库(密码可能与bcrypt一起保存)
  3. 客户端打开HTTPS连接,它对服务器进行身份验证(因此需要服务器证书),并且在交换主密钥后,应该加密连接。
  4. 客户端以明文形式将用户名/密码发送给服务器
  5. 服务器在密码上运行bcrypt,并将其与存储在数据库中的密码进行比较
如果您有任何疑虑,请参阅此original post.
NB:我个人从未尝试过这个。

    推荐阅读