В чем причина некорректного формирования response?

Рейтинг: 1Ответов: 0Опубликовано: 24.03.2023

Сделал согласно описанию (ниже) авторизацию на сайте. Но получаю ошибку что неверно указан response. В чем может быть причина?

Процедура получения заголовка на python:

import hashlib
import base64
import datetime
import time
import  requests


def generate_digest(username, password, method, rel_uri, realm):
    # Get current time and nonce
    now = datetime.datetime.now(datetime.timezone.utc)
    nonce = base64.b64encode(now.strftime('%a, %d %b %Y %H:%M:%S GMT').encode('ascii')).decode('ascii')
    print (nonce)


    ha1_str = f"{username}:{realm}:{password}"
    ha1_bytes = ha1_str.encode('utf-8')
    ha1 = hashlib.sha256(ha1_bytes).hexdigest()

    # Calculate HA2
    ha2_str = f"{method}:{rel_uri}"
    ha2_bytes = ha2_str.encode('utf-8')
    ha2 = hashlib.sha256(ha2_bytes).hexdigest()

    # Calculate response
    response_str = f"{ha1}:{nonce}:{ha2}"
    response_bytes = response_str.encode('utf-8')
    response = hashlib.sha256(response_bytes).hexdigest()


    # Check if the request is still valid
    diff = time.mktime(now.timetuple()) - time.mktime(
        datetime.datetime.strptime(now.strftime('%a, %d %b %Y %H:%M:%S GMT'), '%a, %d %b %Y %H:%M:%S GMT').timetuple())
    if diff > 300:
        print("Request is not valid: nonce is too old")
    else:
        # Return authorization header
        return f'Digest username={username}, realm={realm}, nonce={nonce},  algorithm=SHA-256, response={response}'

Описание алгоритма:

Для авторизации используется Digest схема, где nonce представляется стандартной строкой, содержащей дату и время генерации запроса (пример "Fri, 27 Sep 2019 17:15:00 GMT").

Формат дат: Даты должны обязательно быть в формате IMF-fixdate, согласно RFC 7231 Nonce в вычислениях Дата преобразовывается в Base-64 строку, согласно RFC 7616

Действительность запросов: Запрос считается недействительным, если между моментом приема сообщения (серверным временем) и моментом генерации сообщения (указанным в nonce) разница более 5 минут.

За имлементацию Digest следует принять последний RFC 7616, где:

HA1 = SHA256("{username}:{realm}:{password}")
HA2 = SHA256("{method}:{rel-uri}")
nonce=base64(current date)
response = SHA256("{HA1}:{nonce}:{HA2}")

Ответы

Ответов пока нет.