Невозможно проверить секретный хэш для клиента в пулах пользователей Amazon Cognito

Я застрял в процессе «Пулы пользователей Amazon Cognito Identity».

Я перепробовал все возможные коды для аутентификации пользователя в пользовательских пулах когнито. Но я всегда получаю сообщение об ошибке «Ошибка: невозможно проверить секретный хеш для клиента 4b ******* fd».

Вот код:

AWS.config.region = 'us-east-1'; // Region
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:b64bb629-ec73-4569-91eb-0d950f854f4f'
});

AWSCognito.config.region = 'us-east-1';
AWSCognito.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:b6b629-er73-9969-91eb-0dfffff445d'
});

AWSCognito.config.update({accessKeyId: 'AKIAJNYLRONAKTKBXGMWA', secretAccessKey: 'PITHVAS5/UBADLU/dHITesd7ilsBCm'})

var poolData = { 
    UserPoolId : 'us-east-1_l2arPB10',
    ClientId : '4bmsrr65ah3oas5d4sd54st11k'
};
var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);

var userData = {
     Username : '[email protected]',
     Pool : userPool
};

var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);

cognitoUser.confirmRegistration('123456', true,function(err, result) {
if (err) {
    alert(err);
    return;
}
console.log('call result: ' + result);
});

person Ronak Patel    schedule 25.05.2016    source источник
comment
Принятый ответ больше НЕ действителен. Инструкции по созданию секретного хэша находятся здесь docs.aws.amazon.com/cognito/latest/developerguide/   -  person jasiustasiu    schedule 28.11.2017
comment
Да, и посмотрите на ответ @Simon Buchan ниже для реализации JavaScript. Работает отлично.   -  person guzmonne    schedule 13.03.2018
comment
Note that Generate client secret must be unchecked when creating a web app; the Amazon Cognito Identity SDK for JavaScript doesn’t support apps that have a client secret simply because the client secret could be easily viewed in your code. aws.amazon.com/blogs/mobile/   -  person yadab    schedule 23.10.2020


Ответы (18)


Похоже, что в настоящее время AWS Cognito плохо обрабатывает секреты клиента. Он будет работать в ближайшем будущем, но пока это все еще бета-версия.

Для меня это нормально работает для приложения без секрета клиента, но не работает для приложения с секретом клиента.

Итак, в пуле пользователей попробуйте создать новое приложение, не создавая секрета клиента. Затем используйте это приложение для регистрации нового пользователя или подтверждения регистрации.

person thomas.g    schedule 26.05.2016
comment
Так могу ли я работать с приложением без секрета клиента в javascript - person Ronak Patel; 26.05.2016
comment
как я уже сказал, создайте новое приложение в консоли AWS UserPools и снимите флажок «Создать секрет клиента». Затем в опубликованном вами коде, я думаю, вы можете заменить ClientId в своем объекте poolData на идентификатор клиента, соответствующий только что созданному приложению. - person thomas.g; 26.05.2016
comment
сталкивается с той же проблемой при инициализации аутентификации с помощью SRP_A. ClientError: произошла ошибка (NotAuthorizedException) при вызове операции InitiateAuth: невозможно проверить секретный хэш для клиента ******. Как именно работает эта srp_a? Я создал srp_a с помощью модуля python srp, теперь он говорит об указанной выше ошибке. - person Manuj Rastogi; 13.10.2016
comment
@ManujRastogi, вам следует открыть новый вопрос для вашей конкретной проблемы - person thomas.g; 13.10.2016
comment
К вашему сведению: Это только что случилось со мной, только сейчас. Это все еще работает в январе 2017 года. Когда я создал приложение без client_secret, я смог использовать JS SDK. Когда я создал приложение с client_secret, я получил ту же ошибку, что и в исходном вопросе. - person Cheeso; 07.01.2017
comment
По состоянию на 21 апреля 2017 г. он по-прежнему не работает с использованием интерфейса командной строки AWS, когда для клиента приложения был включен секретный ключ. aws cognito-idp admin-initiate-auth \ --region ap-northeast-1 \ --user-pool-id MY_POOL_ID \ --client-id MY_CLIENT_ID \ --auth-flow ADMIN_NO_SRP_AUTH \ --auth-parameters USERNAME = username @ gmail.com, ПАРОЛЬ = som3PassW0rd - person Stanley Yong; 21.04.2017
comment
По состоянию на январь 2018 года это все еще не поддерживается. Документация по репозиторию Github github.com/aws/amazon-cognito-identity-js упоминает это: "When creating the App, the generate client secret box must be unchecked because the JavaScript SDK doesn't support apps that have a client secret." - person kakoma; 11.01.2018
comment
Можно ли отправлять такие данные из внешнего интерфейса без активации секрета клиента? - person Linus; 18.03.2018
comment
У меня такая же ошибка, но для AWS PowerShell. Я получаю Register-CGIPUserInPool : Unable to verify secret hash for client 6n***** - person J86; 03.04.2018
comment
По состоянию на апрель 2018 года это все еще справедливо и для Python SDK. Пришлось создать приложение без секрета. - person Daniel Kvasnicka; 16.04.2018
comment
См. stackoverflow.com/a/50205454/1251137, чтобы добавить HashedSecret в вызовы для NodeJS. - person ptimson; 07.05.2018
comment
19 мая 2018 года, такая же ошибка, нам нужно создать приложение без секрета клиента. - person Dileep; 19.05.2018
comment
12 июля 2018 г., та же ошибка при создании приложения с секретным кодом клиента. - person Nickadiemus; 12.07.2018
comment
12 сентября 2018 г. - та же проблема. Даже если я не использую клиента, который генерирует секрет, я получаю 400 независимо от того, аутентифицирован пользователь или нет. Однако, несмотря на это, приложение работает должным образом. - person foxtrotuniform6969; 12.09.2018
comment
Март 2019, проблема все еще не решена. Создание нового пула пользователей без секрета клиента устранило проблему. Спасибо @ thomas.g. - person bsberry; 14.03.2019
comment
19 ноября. Запись в журнале - день 1272 дня после комментария. Проблема все еще возникает - person David Bensoussan; 19.11.2019
comment
По состоянию на февраль 2020 года это все еще не поддерживается. - person Sanyam Khurana; 18.02.2020
comment
22 апреля 2020 года он все еще не работает, когда включен секретный ключ для клиентского приложения. Без секретного ключа работает - person Keivan; 23.04.2020
comment
Еще одна причина избегать Cognito, как чумы, какой позор продукта. - person Eric Guan; 11.06.2020
comment
Сентябрь 2020 г., наткнулся на эту же проблему. - person Prateek; 02.09.2020
comment
Та же проблема существует с PHP SDK. Отмена щелчка на генерации секрета клиента решает эту проблему. - person Enigma Plus; 11.12.2020
comment
Январь 2021 года ... Все то же самое, большое спасибо за решение! - person E-Kami; 19.01.2021
comment
Март 2021 года: обходной путь доступен для клиента с секретом и идентификатором. Проверьте мой ответ ниже. - person Utkarsh; 26.03.2021

Согласно Документам: http://docs.aws.amazon.com/cognito/latest/developerguide/setting-up-the-javascript-sdk.html

Javascript SDK не поддерживает приложения с секретным кодом клиента.

В инструкциях теперь указано, что вам нужно снять флажок «Создать секрет клиента» при создании приложения для пула пользователей.

person Dr Douglas GhD    schedule 03.01.2017
comment
У меня это сработало, используя Node.js на стороне сервера. Спасибо, Док! - person Rick; 20.05.2018

Это может произойти с опозданием на несколько лет, но просто снимите флажок «Создать секрет клиента», и он будет работать для ваших веб-клиентов.

создать вариант клиента приложения

person Tiisetso Tjabane    schedule 04.07.2018
comment
Обратите внимание, что вы не можете редактировать его после создания клиента, поэтому при необходимости создайте новый. - person URL87; 08.05.2019
comment
Если вы создаете новый клиент приложения и у вас есть пул удостоверений (на Federated Identities), который использует поставщик проверки подлинности Cognito, не забудьте обновить поле идентификатора клиента приложения идентификатором нового клиента приложения. - person AMS777; 09.01.2020
comment
Спасибо @Tiisetso Tjabane ???? - person kartonnade; 13.08.2020
comment
Просто для ясности, вам не нужно создавать новый пул пользователей. Вам необходимо создать новый клиент приложения в пользовательском пуле. Поэтому, если у вас уже есть пользовательский пул, содержащий пользователей, вам не нужно создавать весь новый пул пользователей, а только новый клиент приложения в этом пользовательском пуле. - person jeninja; 13.12.2020

Поскольку все остальные разместили свой язык, вот узел (и он работает в браузере с browserify-crypto, автоматически используется, если вы используете webpack или просматриваете):

const crypto = require('crypto');

...

crypto.createHmac('SHA256', clientSecret)
  .update(username + clientId)
  .digest('base64')
person Simon Buchan    schedule 11.08.2017
comment
это простое и лучшее встроенное решение Node.js, спасибо @simon - person Engineer; 06.11.2018

У меня была такая же проблема в SDK .net.

Вот как я решил, если это кому-то еще понадобится:

public static class CognitoHashCalculator
{
    public static string GetSecretHash(string username, string appClientId, string appSecretKey)
    {
        var dataString = username + appClientId;

        var data = Encoding.UTF8.GetBytes(dataString);
        var key = Encoding.UTF8.GetBytes(appSecretKey);

        return Convert.ToBase64String(HmacSHA256(data, key));
    }

    public static byte[] HmacSHA256(byte[] data, byte[] key)
    {
        using (var shaAlgorithm = new System.Security.Cryptography.HMACSHA256(key))
        {
            var result = shaAlgorithm.ComputeHash(data);
            return result;
        }
    }
}

Тогда регистрация будет выглядеть так:

public class CognitoSignUpController
{
    private readonly IAmazonCognitoIdentityProvider _amazonCognitoIdentityProvider;

    public CognitoSignUpController(IAmazonCognitoIdentityProvider amazonCognitoIdentityProvider)
    {
        _amazonCognitoIdentityProvider = amazonCognitoIdentityProvider;
    }

    public async Task<bool> SignUpAsync(string userName, string password, string email)
    {
        try
        {
            var request = CreateSignUpRequest(userName, password, email);
            var authResp = await _amazonCognitoIdentityProvider.SignUpAsync(request);

            return true;
        }
        catch
        {
            return false;
        }
    }

    private static SignUpRequest CreateSignUpRequest(string userName, string password, string email)
    {
        var clientId = ConfigurationManager.AppSettings["ClientId"];
        var clientSecretId = ConfigurationManager.AppSettings["ClientSecretId"];

        var request = new SignUpRequest
        {
            ClientId = clientId,
            SecretHash = CognitoHashCalculator.GetSecretHash(userName, clientId, clientSecretId),
            Username = userName,
            Password = password,
        };

        request.UserAttributes.Add("email", email);
        return request;
    }
}
person Ron Sijm    schedule 21.06.2017
comment
Подтверждаем, что это все еще необходимо и все еще работает в пакете SDK AWS .NET v3.5 (предварительная версия). - person pieSquared; 04.06.2020

Amazon упоминает, как Вычисление значений SecretHash для Amazon Cognito в своей документации с кодом приложения Java. Здесь этот код работает с boto 3 SDK Python.

сведения о клиенте приложения

Вы можете найти свой App clients в левом боковом меню под General settings. Получите эти App client id и App client secret, чтобы создать SECRET_HASH. Для вашего лучшего понимания я закомментировал все выходы каждой строки.

import hashlib
import hmac
import base64

app_client_secret = 'u8f323eb3itbr3731014d25spqtv5r6pu01olpp5tm8ebicb8qa'
app_client_id = '396u9ekukfo77nhcfbmqnrec8p'
username = 'wasdkiller'

# convert str to bytes
key = bytes(app_client_secret, 'latin-1')  # b'u8f323eb3itbr3731014d25spqtv5r6pu01olpp5tm8ebicb8qa'
msg = bytes(username + app_client_id, 'latin-1')  # b'wasdkiller396u9ekukfo77nhcfbmqnrec8p'

new_digest = hmac.new(key, msg, hashlib.sha256).digest()  # b'P$#\xd6\xc1\xc0U\xce\xc1$\x17\xa1=\x18L\xc5\x1b\xa4\xc8\xea,\x92\xf5\xb9\xcdM\xe4\x084\xf5\x03~'
SECRET_HASH = base64.b64encode(new_digest).decode()  # UCQj1sHAVc7BJBehPRhMxRukyOoskvW5zU3kCDT1A34=

В документации boto 3 мы можем увидеть много времени, чтобы спросить о SECRET_HASH. Итак, приведенные выше строки кода помогут вам создать этот SECRET_HASH.

Если вы не хотите использовать SECRET_HASH, просто снимите флажок Generate client secret при создании приложения.

создание нового приложения

person Kushan Gunasekera    schedule 13.06.2019
comment
Для меня это сработало, только если я переключил msg = bytes (app_client_id + username, 'latin-1') на msg = bytes (username + app_client_id, 'latin-1'). Для ясности, я поменял порядок clientId и имени пользователя таким образом, чтобы имя пользователя появлялось первым. - person Josh Wolff; 23.07.2019
comment
Большое спасибо @JoshWolff, я по ошибке поменял местами app_client_id и username. Но я показываю правильный результат в виде комментария, который отображается в соответствии с username + app_client_id. Снова и снова большое спасибо. - person Kushan Gunasekera; 23.07.2019
comment
Совершенно никаких проблем! @Kushan Gunasekera - person Josh Wolff; 24.07.2019

Для всех, кто заинтересован в использовании AWS Lambda для регистрации пользователя с помощью AWS JS SDK, вот шаги, которые я сделал:

Создайте еще одну лямбда-функцию в python для генерации ключа:

import hashlib
import hmac
import base64

secretKey = "key"
clientId = "clientid"
digest = hmac.new(secretKey,
                  msg=username + clientId,
                  digestmod=hashlib.sha256
                 ).digest()
signature = base64.b64encode(digest).decode()

Вызовите функцию через функцию nodeJS в AWS. Подпись служила секретным хешем для Cognito.

Примечание. Ответ во многом основан на ответе Джорджа Кэмпбелла по следующей ссылке: Расчет хэша SHA со строкой + секретным ключом в python

person Molezz    schedule 10.11.2016

Решение для golang. Похоже, это нужно добавить в SDK.

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/base64"
)

func SecretHash(username, clientID, clientSecret string) string {
    mac := hmac.New(sha256.New, []byte(clientSecret))
    mac.Write([]byte(username + ClientID))
    return base64.StdEncoding.EncodeToString(mac.Sum(nil))
}
person syvex    schedule 11.09.2017

Решение для NodeJS с SecretHash

Кажется глупым, что AWS удалила секретный ключ из SDK, поскольку он не будет отображаться в NodeJS.

Я заставил его работать в NodeJS, перехватывая выборку и добавляя хешированный ключ, используя ответ @Simon Buchan.

ognito.js

import { CognitoUserPool, CognitoUserAttribute, CognitoUser } from 'amazon-cognito-identity-js'
import crypto from 'crypto'
import * as fetchIntercept from './fetch-intercept'

const COGNITO_SECRET_HASH_API = [
  'AWSCognitoIdentityProviderService.ConfirmForgotPassword',
  'AWSCognitoIdentityProviderService.ConfirmSignUp',
  'AWSCognitoIdentityProviderService.ForgotPassword',
  'AWSCognitoIdentityProviderService.ResendConfirmationCode',
  'AWSCognitoIdentityProviderService.SignUp',
]

const CLIENT_ID = 'xxx'
const CLIENT_SECRET = 'xxx'
const USER_POOL_ID = 'xxx'

const hashSecret = (clientSecret, username, clientId) => crypto.createHmac('SHA256', clientSecret)
  .update(username + clientId)
  .digest('base64')

fetchIntercept.register({
  request(url, config) {
    const { headers } = config
    if (headers && COGNITO_SECRET_HASH_API.includes(headers['X-Amz-Target'])) {
      const body = JSON.parse(config.body)
      const { ClientId: clientId, Username: username } = body
      // eslint-disable-next-line no-param-reassign
      config.body = JSON.stringify({
        ...body,
        SecretHash: hashSecret(CLIENT_SECRET, username, clientId),
      })
    }
    return [url, config]
  },
})

const userPool = new CognitoUserPool({
  UserPoolId: USER_POOL_ID,
  ClientId: CLIENT_ID,
})

const register = ({ email, password, mobileNumber }) => {
  const dataEmail = { Name: 'email', Value: email }
  const dataPhoneNumber = { Name: 'phone_number', Value: mobileNumber }

  const attributeList = [
    new CognitoUserAttribute(dataEmail),
    new CognitoUserAttribute(dataPhoneNumber),
  ]

  return userPool.signUp(email, password, attributeList, null, (err, result) => {
    if (err) {
      console.log((err.message || JSON.stringify(err)))
      return
    }
    const cognitoUser = result.user
    console.log(`user name is ${cognitoUser.getUsername()}`)
  })
}

export {
  register,
}

fetch-inceptor.js (разветвлен и отредактирован для NodeJS из Fork https://github.com/werk85/fetch-intercept/blob/develop/src/index.js)

let interceptors = []

if (!global.fetch) {
  try {
    // eslint-disable-next-line global-require
    global.fetch = require('node-fetch')
  } catch (err) {
    throw Error('No fetch available. Unable to register fetch-intercept')
  }
}
global.fetch = (function (fetch) {
  return (...args) => interceptor(fetch, ...args)
}(global.fetch))

const interceptor = (fetch, ...args) => {
  const reversedInterceptors = interceptors.reduce((array, _interceptor) => [_interceptor].concat(array), [])
  let promise = Promise.resolve(args)

  // Register request interceptors
  reversedInterceptors.forEach(({ request, requestError }) => {
    if (request || requestError) {
      promise = promise.then(_args => request(..._args), requestError)
    }
  })

  // Register fetch call
  promise = promise.then(_args => fetch(..._args))

  // Register response interceptors
  reversedInterceptors.forEach(({ response, responseError }) => {
    if (response || responseError) {
      promise = promise.then(response, responseError)
    }
  })

  return promise
}

const register = (_interceptor) => {
  interceptors.push(_interceptor)
  return () => {
    const index = interceptors.indexOf(_interceptor)
    if (index >= 0) {
      interceptors.splice(index, 1)
    }
  }
}

const clear = () => {
  interceptors = []
}

export {
  register,
  clear,
}
person ptimson    schedule 06.05.2018
comment
Мне удалось зарегистрироваться после вашей процедуры, но я не могу войти в систему с помощью этой процедуры. Есть ли какие-либо изменения, которые необходимо сделать для входа в систему? Было бы очень полезно, если бы вы могли добавить его сюда. Заранее спасибо. - person Vinay Wadagavi; 24.07.2020

В Java вы можете использовать этот код:

private String getSecretHash(String email, String appClientId, String appSecretKey) throws Exception {
    byte[] data = (email + appClientId).getBytes("UTF-8");
    byte[] key = appSecretKey.getBytes("UTF-8");

    return Base64.encodeAsString(HmacSHA256(data, key));
}

static byte[] HmacSHA256(byte[] data, byte[] key) throws Exception {
    String algorithm = "HmacSHA256";
    Mac mac = Mac.getInstance(algorithm);
    mac.init(new SecretKeySpec(key, algorithm));
    return mac.doFinal(data);
}
person gandrademello    schedule 15.01.2017
comment
Где вы используете этот секретный хеш в SDK, кроме вывода его на экран? - person Aaron; 23.02.2017
comment
Может ли кто-нибудь указать на какие-либо документы AWS в Интернете, где объясняется аутентификация по секрету клиента? Кодировки подписи base64 / sha256 являются убедительными решениями, но бесполезны, если они явно не соответствуют документам AWS, в которых разъясняется, как аутентифицироваться по секрету клиента. - person Kode Charlie; 20.06.2017

это образец кода php, который я использую для генерации секретного хэша

<?php
    $userId = "aaa";
    $clientId = "bbb";
    $clientSecret = "ccc";
    $s = hash_hmac('sha256', $userId.$clientId, $clientSecret, true);
    echo base64_encode($s);
?>

в этом случае результат:

DdSuILDJ2V84zfOChcn6TfgmlfnHsUYq0J6c01QV43I=
person Titi Wangsa bin Damhore    schedule 02.06.2016
comment
Откуда у тебя этот хеш - person sumit sharma; 10.09.2020
comment
Если это не очевидно, секрет должен быть предоставлен в узле AuthParameters тела запроса с ключом SECRET_HASH, а не SecretHash, как другие параметры. 'AuthParameters' => [ 'USERNAME' => $login, 'PASSWORD' => $password, 'SECRET_HASH' => $this->_createSecretHash($login), ], - person polygone; 12.02.2021

для JAVA и .NET вам необходимо передать секрет в параметрах аутентификации с именем SECRET_HASH.

AdminInitiateAuthRequest request = new AdminInitiateAuthRequest
{
  ClientId = this.authorizationSettings.AppClientId,
  AuthFlow = AuthFlowType.ADMIN_NO_SRP_AUTH,
  AuthParameters = new Dictionary<string, string>
  {
    {"USERNAME", username},
    {"PASSWORD", password},
    {
      "SECRET_HASH", EncryptionHelper.GetSecretHash(username, AppClientId, AppClientSecret)
    }
  },
  UserPoolId = this.authorizationSettings.UserPoolId
};

И это должно работать.

person Shanmukhi Goli    schedule 12.03.2018

Быстрое решение для вышеупомянутой постановки проблемы - удалить существующий клиент приложения и создать новый с отключенным флажком Создать секрет клиента.

Примечание. Не забудьте изменить строку клиента приложения в коде.

AWS Cognito

person Abhishek Gautam    schedule 07.06.2021
comment
Наверное, самый простой способ побороть эту ошибку .. - person Pavindu; 18.07.2021

C ++ с Qt Framework

QByteArray MyObject::secretHash(
     const QByteArray& email,
     const QByteArray& appClientId, 
     const QByteArray& appSecretKey)
{
            QMessageAuthenticationCode code(QCryptographicHash::Sha256);
            code.setKey(appSecretKey);
            code.addData(email);
            code.addData(appClientId);
            return code.result().toBase64();
};
person vpicaver    schedule 13.12.2017

Вот моя 1 команда, и она работает (подтверждено :))

EMAIL="[email protected]" \
CLIENT_ID="[CLIENT_ID]" \
CLIENT_SECRET="[CLIENT_ID]" \
&& SECRET_HASH=$(echo -n "${EMAIL}${CLIENT_ID}" | openssl dgst -sha256 -hmac "${CLIENT_SECRET}" | xxd -r -p | openssl base64) \
&& aws cognito-idp ...  --secret-hash "${SECRET_HASH}"
person Tuong Le    schedule 31.12.2019
comment
Этот бит openssl вызвал у меня посторонний вывод, но это сработало: SECRET_HASH=$(echo -n "${EMAIL}${CLIENT_ID}" | openssl dgst -sha256 -binary -hmac "${CLIENT_SECRET}" | openssl base64) - person Aaron; 05.12.2020

Может быть более компактная версия, но это работает для Ruby, особенно в Ruby on Rails, и ничего не требует:

key = ENV['COGNITO_SECRET_HASH']
data = username + ENV['COGNITO_CLIENT_ID']
digest = OpenSSL::Digest.new('sha256')

hmac = Base64.strict_encode64(OpenSSL::HMAC.digest(digest, key, data))
person Nikolay D    schedule 16.10.2018

Это решение работает в марте 2021 года:

Если вы работаете с клиентом, у которого сгенерированы и client_secret, и client_id, вместо вычисления SECRET_HASH и передачи его функции, как указано в Документы AWS, передайте client_secret.

Примечание. Я пытался сгенерировать новые токены из токена обновления.

let result = await cognitoIdentityServiceProvidor
  .initiateAuth({
    AuthFlow: "REFRESH_TOKEN",
    ClientId: clientId,
    AuthParameters: {
      REFRESH_TOKEN: refresh_token,
      SECRET_HASH: clientSecret,
    },
  })
  .promise();

Это абсурдно, но работает!

person Utkarsh    schedule 26.03.2021
comment
Может ли это рассматриваться как угроза безопасности, если поле Включить аутентификацию имени пользователя и пароля для API администратора для аутентификации (ALLOW_ADMIN_USER_PASSWORD_AUTH) отмечено в конфигурации клиента приложения пула пользователей, а метод initiateAuth используется из кода, обращенного к клиенту (например, React) ? - person Ian Sebastian; 09.04.2021

Cognito аутентификация

Ошибка: клиент приложения не настроен для секрета, но секретный хеш получен

Предоставление secretKey as nil сработало для меня. Предоставляемые учетные данные включают: -

  • CognitoIdentityUserPoolRegion (регион)
  • CognitoIdentityUserPoolId (userPoolId)
  • CognitoIdentityUserPoolAppClientId (ClientId)
  • AWSCognitoUserPoolsSignInProviderKey (AccessKeyId)

    // setup service configuration
    let serviceConfiguration = AWSServiceConfiguration(region: CognitoIdentityUserPoolRegion, credentialsProvider: nil)
    
    // create pool configuration
    let poolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: CognitoIdentityUserPoolAppClientId,
                                                                    clientSecret: nil,
                                                                    poolId: CognitoIdentityUserPoolId)
    
    // initialize user pool client
    AWSCognitoIdentityUserPool.register(with: serviceConfiguration, userPoolConfiguration: poolConfiguration, forKey: AWSCognitoUserPoolsSignInProviderKey)
    

Все вышеперечисленное работает с приведенным ниже примером кода.

AWS Пример кода: https://github.com/awslabs/aws-sdk-ios-samples/tree/master/CognitoYourUserPools-Sample/Swift

Сообщите мне, если это не сработает для вас.

person Siddharth Kavthekar    schedule 17.10.2019
comment
это мертвая ссылка - person Jpnh; 14.07.2020