Как создать JWT с помощью ES256 в GAE

Я работаю над решением Google App Engine, которое необходимо интегрировать с API, где аутентификация выполняется с помощью JWT. Используемый алгоритм шифрования - ES256, но каждый раз, когда я пытаюсь вызвать метод jwt.encode() с ES256, выдается следующая ошибка:

ImportError: No module named cryptography.hazmat.bindings._constant_time

Это происходит потому, что cryptography.io не поддерживается в App Engine (стандартный env), поскольку он использует CFFI (интерфейс внешних функций C).

Есть ли другие рекомендуемые подходы для создания этого JWT из моего приложения Python App Engine и с использованием ES256?

Вот упрощенный код:

import jwt

keystring = """-----BEGIN PRIVATE KEY-----
SECRET
-----END PRIVATE KEY-----"""

HEADERS = {'alg': 'ES256', 'kid': '1234SECRET', 'typ': 'JWT'}
PAYLOAD = {
    'iss': 'secret-secret-secret',
    'exp': time.time() + 20 * 60,
    'aud': 'audience'
}

key = jwt.encode(PAYLOAD, keystring, algorithm='ES256', headers=HEADERS)

Заранее спасибо.

Можно ли вместо этого использовать среду выполнения Стандарт App Engine второго поколения? Он должен поддерживать любую зависимость, использующую CFFI.

Dustin Ingram 18.12.2018 23:53

Привет, @DustinIngram, к сожалению, приложение построено на Python27, и его перенос не возможен. Так что я не могу использовать стандартную среду V2. Спасибо за помощь.

wilsotobianco 19.12.2018 00:58

Не самая идеальная ситуация, но вы можете создать небольшое приложение Python 3 (возможно, даже облачную функцию), которое генерирует токен, который вы можете вызвать из приложения Python 2.

Dustin Ingram 19.12.2018 01:54

Я тоже думал об этом. Возможно, создание службы в моем проекте с использованием конфигурации env: flex и предоставление API для ее вызова. Это должно работать правильно?

wilsotobianco 19.12.2018 02:03

Ага, я верю, что будет.

Dustin Ingram 19.12.2018 06:36

Мне любопытно, нашли ли вы когда-нибудь обходной путь. Я столкнулся с той же проблемой

Daniel 14.09.2019 17:33
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
1 627
0

Другие вопросы по теме