AWS Поставщик удостоверений внешнего пула пользователей Cognito (OID C) - PullRequest
0 голосов
/ 30 апреля 2020

Я использую интеграцию Cognito App Client с внешним провайдером (Twitch). Аутентификация пользователя работает нормально, но поскольку Cognito использует код с сервера аутентификации, я не уверен, как отправлять запросы Twitch с токеном, который я я обычно получаю от дергаться я Cognito не будет использовать этот код. У меня есть только код Cognito, который я могу использовать в запросах токенов https: // {my-domain} / oauth2 / в обмен на токены Cognito. запрос возвращает id_token, access_token и refresh_token, которые декодируются в виде идентификатора токена id

{
  "at_hash": "yTNkeTAqzqcXCYi3yLL2Pw",
  "sub": "3cfba641-4058-475f-9818-17291175fd31",
  "cognito:groups": [
    "us-east-1_xxxxxxxxxxxx"
  ],
  "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxxxxx",
  "cognito:username": "xxxxxxxxxxxx",
  "preferred_username": "xxxxxxxxxxxx",
  "nonce": "SxxlipCDVbXbcXa1H7Uf9_nM0uOurAAObUVCyreBDDux99QoAngUoiGdE0me-0Zon6fEVLLTSqD4EN1Y6_lFm48MaoBaxyywZCQKOT70gfQEfkuhlsjImJd1ko3qH3QKdlmvWSPCUZoACPYNSgR364VPELyQTVMkRTCt9eYROag",
  "aud": "35l1cn53cnj9sv1ndu8u01amk0",
  "identities": [
    {
      "userId": "xxxxxxxxxxxx",
      "providerName": "xxxxxxxxxxxx",
      "providerType": "OIDC",
      "issuer": null,
      "primary": "true",
      "dateCreated": "1588191000072"
    }
  ],
  "token_use": "id",
  "auth_time": 1588191003,
  "exp": 1588194603,
  "iat": 1588191003
}

токен доступа

{
  "sub": "3cfba641-4058-475f-9818-17291175fd31",
  "cognito:groups": [
    "us-east-1_xxxxxxxxxxxx"
  ],
  "token_use": "access",
  "scope": "aws.cognito.signin.user.admin phone openid profile email",
  "auth_time": 1588191003,
  "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxxxxx",
  "exp": 1588194603,
  "iat": 1588191003,
  "version": 2,
  "jti": "55863213-c764-4b07-a386-a9c93d14e4b2",
  "client_id": "xxxxxxxxxxxx",
  "username": "xxxxxxxxxxxx"
}

Как получить токен пользователя для вызова Twitch API (например, GET https://api.twitch.tv/helix/users конечная точка с токеном авторизованного пользователя)

1 Ответ

0 голосов
/ 30 апреля 2020

ВНИМАНИЕ - при неправильном выполнении вы выставляете конфиденциальные атрибуты клиенту.

Вам необходимо создать 2 версии атрибутов - custom и dev:custom, сопоставить атрибуты провайдера c с custom из них (похоже, dev:custom не сопоставимы), затем в триггере TokenGeneration_HostedAuth необходимо получить эти custom атрибуты, установить dev:custom единиц, а затем удалить custom s.

Похоже на твик, но я не вижу другого способа сделать это и обеспечить безопасность токенов.

Решением для этого является создание пользовательских атрибутов в вашем пуле пользователей, а затем сопоставление этих атрибутов. для провайдера идентификации. Выглядит примерно так:

'custom:refresh_token': refresh_token
'custom:id_token': id_token
'custom:access_token': access_token

Шаблон облачной информации для этого:

пул пользователей

....
Schema: [
    {
        AttributeDataType: 'String',
        DeveloperOnlyAttribute: true,
        Mutable: true,
        Name: 'refresh_token',
        Required: false,
    },
    {
        AttributeDataType: 'String',
        DeveloperOnlyAttribute: true,
        Mutable: true,
        Name: 'access_token',
        Required: false,
    },
    {
        AttributeDataType: 'String',
        DeveloperOnlyAttribute: true,
        Mutable: true,
        Name: 'id_token',
        Required: false,
    },
    {
        AttributeDataType: 'String',
        Mutable: true,
        Name: 'refresh_token',
        Required: false,
    },
    {
        AttributeDataType: 'String',
        Mutable: true,
        Name: 'access_token',
        Required: false,
    },
    {
        AttributeDataType: 'String',
        Mutable: true,
        Name: 'id_token',
        Required: false,
    },
],
....

провайдер идентификации пользователей пула

....
AttributeMapping: {
    'custom:refresh_token': 'refresh_token',
    'custom:access_token': 'access_token',
    'custom:id_token': 'id_token',
},
....
...