Сбой проверки подписи 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()