Сбой проверки подписи HMAC-SHA-256 на веб-логине Telegram

Я пытаюсь добавить Telegram Web Login в свой проект Django+Vue. Я обрабатываю логин на Vue и напрямую передаю данные авторизации, полученные от TG, в Django через DRF. Это работает нормально. Проблема возникает при проверке на POST REST. Когда я использовал библиотеку js-sha256 на Vue, она работала отлично, и я получал истинное значение хэш-строки, предоставленной функцией sha256.hmac() из библиотеки js-sha256. Я пытаюсь получить тот же хэш на Python. Вот объяснение проверки данных TG и код, который я использую в представлении POST:

class TelegramLoginSerializer(serializers.Serializer):
    raw_data = serializers.JSONField(required=True)

def create(self, validated_data):
    raw_data = validated_data['raw_data']
    tg_data = "\n".join([f'{k}={raw_data[k]}' for k in sorted(raw_data)])

    if raw_data['hash'] != self.verify_telegram_data(tg_data):
        return PermissionDenied()
    else:
        ...

@staticmethod
def verify_telegram_data(data):
    secret_key = hashlib.sha256(settings.TG_BOT_TOKEN.encode('utf-8'))
    message = data.encode('utf-8')
    return hmac.new(secret_key.digest(), message, hashlib.sha256).hexdigest()
Вернуться на верх