Как подключиться к AWS AppSync с помощью Cognito Identity Pools и Amplify - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть API-интерфейс AWS AppSync, который использует роли IAM для аутентификации. Я использую клиент Amplify GraphQL для подключения к серверу AppSync. Изображение ниже описывает шаги, которые необходимо выполнить для получения учетных данных IAM, которые, как я предполагаю, способен выполнить Amplify. Однако я не могу найти документацию по настройке рабочего примера.

Обратите внимание, что я использую пул пользователей Cognito напрямую для аутентификации, а не внешний поставщик, такой как Google или Facebook.

Access AWS Services with a User Pool and an Identity Pool

Пока что я могу аутентифицировать пользователя и получить токен JWT (шаг 1):

const Amplify = require('aws-amplify').default
const { Auth } = require('aws-amplify')


Amplify.configure({
  Auth: {
    region: process.env.AWS_REGION,
    userPoolId: process.env.COGNITO_USERPOOL_ID,
    userPoolWebClientId: process.env.COGNITO_WEBCLIENT_ID,
  },
})

Auth.signin(username, password)
  .then((user) => {
    const token = user.idToken.jwtToken
    // I've got the token - what next?
  })

Как я могу запросить учетные данные IAM из пула удостоверений (шаг 2) и использовать их для доступа к API AppSync (шаг 3) с помощью Amplify?

Если Amplify не может получить учетные данные сама, я могу использовать AWS.CognitoIdentityCredentials для запроса их с помощью AWS SDK, однако я не вижу способа передачи их в Amplify для проверки подлинности запросов API (см. на эту проблему я создал для более подробной информации).

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Я смог использовать cognito для аутентификации моего клиента, а затем передал jwtToken клиенту aws-appsync, чтобы иметь возможность использовать APPSYNC с AMAZON_COGINITO_USER_POOLS.Также в коде вы увидите, где я использовал API_KEY в качестве альтернативы.Я оставил API_KEY закомментированным.Я поделюсь этим как альтернатива для тех, кто также хочет попробовать получить доступ с помощью клиента Apollo и aws-appsync.

if (!process.browser) {
  global.fetch = require('node-fetch')
}

const appSyncClientOptions = {
  url: awsConfig.aws_appsync_graphqlEndpoint, 
  region: awsConfig.aws_appsync_region,
  auth: {
    // type: 'API_KEY',
    // apiKey: awsConfig.aws_appsync_apiKey,
    type: awsConfig.aws_appsync_authenticationType,   // 'AMAZON_COGNITO_USER_POOLS'
    jwtToken: async () => (await Auth.currentSession()).getAccessToken().getJwtToken()
  },
  disableOffline: true,
};

const apolloClientOptions = {
  link: createAppSyncLink({
    ...appSyncClientOptions,
    resultsFetcherLink: createHttpLink({ uri: appSyncClientOptions.url, fetch })
  })  
};

const client = new Client(appSyncClientOptions, apolloClientOptions);

const WithProvider = () => (
  <ApolloProvider client={client}>
    <Rehydrated>
      <GqlList />
    </Rehydrated>
  </ApolloProvider>
)

export default WithProvider;
0 голосов
/ 18 апреля 2019

, если ваша конфигурация ampify имеет AppSync API с аутентификацией AWS_IAM и пулом Cognito, Amplify будет использовать токен id для автоматического получения учетных данных AWS.

Чтобы вызвать API-интерфейс AppSync, вам нужно:

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