Как передать токен от поставщика OpenID connect в api AppSync

#amazon-web-services #openid-connect #openid #aws-appsync

#amazon-веб-сервисы #openid-connect #openid #aws-appsync

Вопрос:

Я настроил AppSync на использование OIDC / OpenID Connect в качестве авторизатора и успешно получил токен на клиенте. Я не использую cognito. Сейчас я пытаюсь выяснить следующее:

  1. Я использую apollo sdk для взаимодействия с моим API AppSync GraphQL, как мне передать этот токен open id от клиента к нему? Я предполагаю, что это должен быть какой-то заголовок, но я не могу найти никаких документов о том, что AppSync ожидает от него.
  2. Как только я передам токен, как мне получить доступ к его заявкам в AppSync / AppSync resolver после его проверки и извлечения данных токена?

Ответ №1:

  1. Передайте токен Firebase при создании клиента:
 const client = new AWSAppSyncClient({
  url: ...,
  region: ...,
  auth: {
    type: 'OPENID_CONNECT',
    jwtToken: async() => token // Token from Firebase
  }
})
 
  1. Утверждения из токена доступны в $context.identity . Некоторые из этих утверждений являются стандартными утверждениями (заданными OpenID Connect), а другие являются пользовательскими утверждениями (уникальными для вашего проекта). Форма $context.identity будет похожа на ту, которая была передана, если бы вы использовали AWS Cognito вместо Firebase:
 {
    "sub" : "...", // standard claim - straight from the token
    "issuer" : "...", // standard claim - straight from the token
    "username" : "...",
    "claims" : { ... }, // custom claims from the token
    "sourceIp" : ["x.x.x.x"],
    "defaultAuthStrategy" : "..."
}
 

Как вы можете видеть выше, sub и iss это два стандартных утверждения, которые отображаются непосредственно из токена. Все остальные утверждения из токена отображаются как пользовательские утверждения. Их можно получить через $context.identity.claims.get()

Затем вы можете использовать эти утверждения в распознавателе и действовать с ними стандартным образом.