Я работаю над решением 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)
Заранее спасибо.
Привет, @DustinIngram, к сожалению, приложение построено на Python27, и его перенос не возможен. Так что я не могу использовать стандартную среду V2. Спасибо за помощь.
Не самая идеальная ситуация, но вы можете создать небольшое приложение Python 3 (возможно, даже облачную функцию), которое генерирует токен, который вы можете вызвать из приложения Python 2.
Я тоже думал об этом. Возможно, создание службы в моем проекте с использованием конфигурации env: flex
и предоставление API для ее вызова. Это должно работать правильно?
Ага, я верю, что будет.
Мне любопытно, нашли ли вы когда-нибудь обходной путь. Я столкнулся с той же проблемой
Можно ли вместо этого использовать среду выполнения Стандарт App Engine второго поколения? Он должен поддерживать любую зависимость, использующую CFFI.