#ruby #amazon-web-services #amazon-cognito
#ruby #amazon-web-services #amazon-cognito
Вопрос:
Я хотел бы знать, как зарегистрировать нового пользователя с помощью AWS Cognito Ruby SDK.
До сих пор я пытался:
Ввод
AWS_KEY = "MY_AWS_KEY"
AWS_SECRET = "MY_AWS_SECRET"
client = Aws::CognitoIdentityProvider::Client.new(
access_key_id: AWS_KEY,
secret_access_key: AWS_SECRET,
region: 'us-east-1',
)
resp = client.sign_up({
client_id: "4d2c7274mc1bk4e9fr******", # required
username: "test@test.com", # required
password: "Password23sing", # required
user_attributes: [
{
name: "app", # required
value: "my app name",
},
],
validation_data: [
{
name: "username", # required
value: "true",
},
]
})
Вывод
Aws::CognitoIdentityProvider::Errors::NotAuthorizedException (Unable to verify secret hash for client 4d2c7274mc1bk4e9fr*****)
Ссылки
Комментарии:
1. Спасибо @rmlockerd однако существует много способов настройки учетных данных. Я использовал документацию по адресу: docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/… Экземпляр клиента, похоже, в порядке.
Ответ №1:
Если клиент вашего приложения настроен с секретом клиента, большинство клиентских запросов требуют, чтобы вы включили «секретный хэш» в параметры запроса. Документы Cognito описывают секретный хэш следующим образом:
Значение secretthash представляет собой базовый 64-кодированный код аутентификации сообщения с ключевым хэшем (HMAC), вычисляемый с использованием секретного ключа клиента пула пользователей и имени пользователя плюс идентификатор клиента в сообщении. Следующий псевдокод показывает, как вычисляется это значение.
Base64 ( HMAC_SHA256 ( «Секретный ключ клиента», «Имя пользователя» «Идентификатор клиента» ) )
В документах также ясно указано с помощью большого примера Java, что вы должны создать свой собственный. После небольшого эксперимента я смог успешно завершить sign_up
вызов со следующим (мой тестовый пул был настроен так, чтобы требовать атрибуты электронной почты и имени):
def secret_hash(client_secret, username, client_id)
Base64.strict_encode64(OpenSSL::HMAC.digest('sha256', CLIENT_SECRET, username CLIENT_ID))
end
client = Aws::CognitoIdentityProvider::Client.new(
access_key_id: AWS_KEY,
secret_access_key: AWS_SECRET,
region: REGION)
username = 'bob.scum@example.com'
resp = client.sign_up({
client_id: CLIENT_ID,
username: username,
password: 'Password23sing!',
secret_hash: secret_hash(CLIENT_SECRET, username, CLIENT_ID),
user_attributes: [{ name: 'email', value: username },
{ name: 'name', value: 'Bob' }],
validation_data: [{ name: 'username', value: 'true' },
{ name: 'email', value: 'true' }]
})
CLIENT_SECRET
секретен ли клиент приложения, который можно найти в разделе Общие настройки> Клиенты приложений.
Результат:
#<struct Aws::CognitoIdentityProvider::Types::SignUpResponse
user_confirmed=false,
code_delivery_details=nil,
user_sub="c87c2ac8-1480-4d15-a28d-6998d9260e73">