SecretHash: Amazon Cognito

Я использую boto3 для подключения Amazon Cognito. Я пытаюсь использовать метод sign_up; однако есть параметр SecretHash, который я не могу понять, как он создается.

Исходная документация по SecretHash:

SecretHash (строка) - хэш-код аутентификации сообщения с ключом (HMAC), рассчитанный с использованием секретного ключа клиента пула пользователей и имени пользователя плюс идентификатор клиента в сообщении.

Я получаю сообщение об ошибке ниже, если не укажу параметр SecretHash.

botocore.exceptions.ClientError: произошла ошибка (NotAuthorizedException) при вызове операции SignUp: невозможно проверить секретный хэш для клиента xxx


person cagatayodabasi    schedule 29.04.2016    source источник


Ответы (4)


Не знаю, помогает ли это, но если вы используете JavaScript SDK, в части настройки 1 говорится:

Создайте приложение для своего пользовательского пула. Обратите внимание, что флажок «Создать секрет клиента» должен быть снят, потому что SDK JavaScript не поддерживает приложения, у которых есть секрет клиента.

Я создал другое приложение без создания секретного ключа клиента, и оно сработало.

person user1432403    schedule 29.04.2016

У меня работает следующее:

import hmac
import hashlib
import base64 

def signup( username, password, email, phone):
  msg=username + CLIENTID
  dig = hmac.new(str(CLIENTSECRET).encode('utf-8'), 
  msg=str(msg).encode('utf-8'), digestmod=hashlib.sha256).digest()
  d2 = base64.b64encode(dig).decode()
  dig = d2
  resp = pool.sign_up(
    ClientId=CLIENTID,
    SecretHash=str(dig),
    Username=username,
    Password=password,
    UserAttributes=[
            { 'Name': 'email', 'Value': email},
            { 'Name': 'phone_number', 'Value': phone}
    ])

Это было после попытки всех перестановок входных данных для секретной части и части сообщения. CLIENTID находится в разделе «Клиенты приложений» пользовательских пулов AWS -> «Идентификатор клиента приложения». CLIENTSECRET находится в разделе «Клиент приложения» пользовательских пулов AWS -> «Секрет клиента приложения».

Надеюсь это поможет

person LazyBrush    schedule 24.05.2017

В этом примере показано, как вы можете сгенерировать HMAC с хеш-алгоритмом SHA256 на Python, используя библиотеки hmac. Расчет хэша SHA со строкой + секретным ключом в питоне

В этом случае секрет HMAC будет вашим «секретом клиента». И сообщение будет иметь размер utf8 байтов (имя пользователя + clientId).

Вам нужно предоставить secretHash только в том случае, если ваш клиент был сгенерирован с секретом, иначе секретный хеш может быть зафиксирован в вызове.

Также я бы порекомендовал вам изучить Cognito UserPools с нашими клиентскими SDK: javascript, android или IOS. Поскольку SDK обрабатывают для вас генерацию секретного хэша.

person patanjal    schedule 29.04.2016
comment
когда я пытаюсь пропустить его, не отправляя этот параметр, я получаю ту же ошибку. - person cagatayodabasi; 30.04.2016
comment
Вам необходимо сгенерировать новый клиент приложения, для которого не требуется секрет, сняв флажок «Создать секрет клиента». Затем вы можете опустить этот параметр для нового клиента. - person Vinay Kushwaha; 17.05.2016

Я только что отказался от поддержки AWS по этому вопросу. Вот что мне сказали:

AWS REP: позвольте мне начать с самого начала

AWS REP: secretHash не на 100% стабильный

AWS REP: для вызова функции

AWS REP: secretHash необходимо опустить

AWS REP: значит, вам нужно вызывать его без secretHash

AWS REP: но .....

AWS REP: если вы настроили свое приложение с настройкой секретности / безопасности

AWS REP: когнито не обрадуется, если не будет секретного хеша

AWS REP: вам нужно использовать другой ключ приложения

AWS REP: это было подтверждено без этой настройки

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

person Ian Laird    schedule 08.05.2016