Неверный пароль при импорте пользователя в Firebase (password_hash с использованием SHA256) - PullRequest
0 голосов
/ 03 декабря 2018

Мы переносим пользователей в Firebase Auth из внешней базы данных, используя хэшированный с помощью SHA256 пароль.

В настоящее время мы пытаемся from firebase_admin import auth импортировать пользователей.Мы можем импортировать пример пользователя, но не можем войти с ним (неверный пароль).

Вот минимальные фрагменты кода для воспроизведения проблемы.

  1. Мы используем пользователя в качестве примера
  2. Мы используем sha256 для хеширования пароля
  3. Запуск import_users_to_firebase()
  4. Попробуйте войти с примеромпользователь -> неверный пароль

`

def hash_password(raw_password):
    import base64
    import hashlib
    algo = hashlib.sha256()
    algo.update(raw_password)
    return base64.b64encode(algo.digest())

def create_mock_user_data():
    email = 'test@example.com'
    password = 'test@example.com'
    password_hash = hash_password(password)
    print 'password_hash: {}'.format(password_hash)
    return email, password_hash


def import_users_to_firebase():
    mock_email, mock_password_hash = create_mock_user_data()
    users = [
        auth.ImportUserRecord(
            uid='someuid',
            display_name='Test example',
            email=mock_email,
            email_verified=False,
            password_hash=b'{}'.format(mock_password_hash),
        ),
        # users list can contain up to 1000 records
    ]
    hash_alg = auth.UserImportHash.sha256(rounds=0)
    result = auth.import_users(users, hash_alg=hash_alg)

    print('Successfully imported {0} users. Failed to import {1} users.'.format(
    result.success_count, result.failure_count))

    for err in result.errors:
        print('Failed to import {0} due to {1}'.format(
            users[err.index].uid, err.reason))

`

Я что-то здесь упускаю или что-то неправильно понимаю?

Есть ли способ проверить, правильно ли импортирован password_hash?Или есть способ, которым я могу сконфигурировать, какой алгоритм хэширования использует Firebase, чтобы импортированный пароль совпадал с примером входа пользователя?

1 Ответ

0 голосов
/ 05 декабря 2018

Большое спасибо команде поддержки Firebase, я решил мою проблему :) Хитрость заключается в том, чтобы не делать base64-кодирование в hash_password () и не декодировать его впоследствии, чтобы это была необработанная последовательность байтов.То есть

auth.ImportUserRecord(
    uid='someuid',
    display_name='Test example',
    email=mock_email,
    email_verified=False,
    password_hash=mock_password_hash, # <-- mock_password_hash is not base64 encoded
)
...