Как безопасно разделять глобальную переменную (кешированный публичный сертификат) в приложении python flask - PullRequest
0 голосов
/ 11 мая 2018

Мне нужно кэшировать публичный сертификат, чтобы использовать его для проверки токенов доступа JWT при каждом запросе. Этот публичный сертификат часто меняется, поэтому я реализовал фоновую функцию, которая периодически связывается с API, чтобы получить этот сертификат и сохранить его в памяти.

Учитывая, что Flask запускает несколько потоков, считается ли это безопасной практикой иметь глобальную переменную, указывающую на этот сертификат?

Как правильно определить эту переменную, чтобы функции в моих классах ресурсов могли получить эту переменную?

project
|- app.py
|- db.py
|- models
    |- client.py
|- resources
    |- client.py

1 Ответ

0 голосов
/ 12 мая 2018

Вы можете использовать redis для хранения общедоступного сертификата и предоставить внутренний API для своего приложения, чтобы обновить и получить его.

@app.route("/public_certificate", methods=["GET"])
def get_public_certificate():

    public_certificate = None

    try:
        expires_in = redis.ttl("public_certificate")

        if expires_in <= TIMEOUT:
            refresh_public_certificate()

        public_certificate = redis.get("public_certificate")
    except:
        pass
    finally:
        return public_certificate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...