Аутентификация клиента Apollo в AWS AppSync с пользовательскими пулами Cognito - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь подключиться к своему AWS AppSync API с помощью простого клиента Apollo, но я не уверен, как правильно структурировать заголовок аутентификации.

До сих пор я следовал документации по аутентификации заголовка здесь: https://www.apollographql.com/docs/react/recipes/authentication.html

И есть этот код, который я адаптировал для включения токена в службу аутентификации Amplify, но он возвращает ошибку 401:

const httpLink = createHttpLink({
  uri: '[API end point address]/graphql'
});

const authLink = setContext((_, { headers }) => {
  const token = async () => (await Auth.currentSession()).getAccessToken().getJwtToken();
  return {
    headers: {
      ...headers,
      authorization: token ? `Bearer ${token}` : ""
    }
  }
})

const client = new ApolloClient({
  link: authLink.concat(httpLink),
  cache: new InMemoryCache()
})

Единственная документация, которую я могу найти по этому поводу, не содержит технических инструкций:

При использовании Amazon Cognito User Pools вы можете создавать группы, которые пользователи принадлежать. Эта информация закодирована в токене JWT, который приложение отправляет в AWS AppSync в заголовке авторизации, когда отправка операций GraphQL.

Отсюда: https://docs.aws.amazon.com/appsync/latest/devguide/security.html

Я знаю, что токен - это хорошо, потому что, если я использую API-интерфейс AppSync JavaScript, он работает. Могу ли я пойти куда-нибудь, чтобы узнать, как этого добиться, или кто-то знает, как?

Редактировать:

Пока я пытался изменить эту строку:

  authorization: token ? `Bearer ${token}` : ""

Следующие попытки:

token

jwtToken: token

authorization: token

Authorization: token

Ничто из этого не сработало.

Ответы [ 2 ]

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

Пример этого вы можете увидеть на Github из образца AWS. Работает с AppSync, но очень похож.

// AppSync client instantiation
const client = new AWSAppSyncClient({
  url: GRAPHQL_API_ENDPOINT_URL,
  region: GRAPHQL_API_REGION,
  auth: {
    type: AUTH_TYPE,
    // Get the currently logged in users credential.
    jwtToken: async () => (await Auth.currentSession()).getAccessToken().getJwtToken(),
  },
  // Amplify uses Amazon IAM to authorize calls to Amazon S3. This provides the relevant IAM credentials.
  complexObjectsCredentials: () => Auth.currentCredentials()
});

Ссылка на AWS репо

0 голосов
/ 07 сентября 2018

Отказ от ответственности: никогда не пробовал, но вот что я хотел бы сделать:

Проверьте код клиента AppSync здесь в качестве основы для создания ссылки аутентификации для клиента Apollo иСервер AppSync.Похоже, что этот код обеспечивает основу для каждого из доступных методов аутентификации.

В частности, если вы пытаетесь использовать метод аутентификации OPENID_CONNECT, создается впечатление, что маркер JWT не обязательно должен предшествовать Bearer (строка 146).

...