Authlib 0.6+ не работает с олицетворением Auth0 и Flask
Олицетворение Auth0 напрямую вызывает URL-адрес обратного вызова при успешной аутентификации, пропуская начальный шаг аутентификации. Это вызывает проблему, потому что flask/client/OAuth.authorize_access_token(), который вызывается как часть обработки обратного вызова, требует наличия переменной сеанса _auth0_callback_
но эта переменная не установлена, потому что в этой ситуации не вызывается единственное место, в котором она установлена: flask/client/OAuth.authorize_redirect().
Мы добавили хак, чтобы установить _auth0_callback_
переменная сеанса, если она не существует непосредственно перед вызовом flask/client/OAuth.authorize_access_token(), но это не так, и мне просто интересно, делаем ли мы что-то не так.
Мы также столкнулись с похожей проблемой _auth0_state_
переменная сеанса, но это могло быть исправлено в v0.7, которую я сейчас тестирую. В настоящее время мы используем Authlib v0.6 в производстве.
Подняли эту проблему с Auth0, но не получили никакого ответа.
Любая помощь приветствуется, спасибо
ОБНОВИТЬ...
Если заглянуть глубже в Authlib, это выглядит так для flask/client/OAuth.authorize_access_token()
вызов обратного вызова URL не требуется в OAuth2Session.fetch_access_token()
чтобы получить токен, если токен включен в ответ авторизации, и это имеет смысл, что токен доступа включен в ответ авторизации в случае олицетворения - см. OAuth2Session.fetch_access_token () # 152. Таким образом, возможно, что токен доступа ответа авторизации от олицетворения Auth0 не существует или не проходит должным образом через...
1 ответ
Согласно моему подтверждению, Auth0 принимает параметр redirect_uri. Проверьте этот пример: https://github.com/lepture/auth0-python-web-app/blob/patch-1/01-Login/server.py
Интеграция с Flask - это оболочка на OAuth2Session, которая обеспечивает authorize_redirect
а также authorize_access_token
методы, чтобы обрабатывать все автоматически для вас. Если вы обнаружите, что интеграция высокого уровня не может удовлетворить ваши потребности, вы всегда можете использовать методы OAuthClient.