#python-3.x #google-authentication #fastapi #authlib
#python-3.x #google-аутентификация #fastapi #authlib
Вопрос:
Я использую это сообщение в блоге из блога Authlib, чтобы добавить google oauth в приложение FastAPI. Я из Ирана, и все работает нормально, когда мой VPN включен, но когда он выключен, и я пытаюсь войти в приложение с помощью Google с иранским IP, Authlib не может проанализировать id_token и отображает следующую ошибку:
json.decoder.JSONDecodeError: Ожидаемое значение: строка 1 столбец 1 (символ 0)
Вот код, который я использую:
app = FastAPI()
app.add_middleware(SessionMiddleware, secret_key="secret-string")
config = Config('/usr/src/app/google-auth.env')
oauth = OAuth(config)
oauth.register(
name='google',
server_metadata_url='https://accounts.google.com/.well-known/openid-configuration',
client_kwargs={
'scope': 'openid email profile'
}
)
@app.route('/login')
async def login(request: Request):
redirect_uri = request.url_for('auth') # absolute url for callback
return await oauth.google.authorize_redirect(request, redirect_uri)
@app.route('/auth')
async def auth(request: Request):
token = await oauth.google.authorize_access_token(request)
print(token)
user = await oauth.google.parse_id_token(request, token)
return RedirectResponse(url='/')
Ошибка возникает в строке oauth.google.parse_id_token
, и я вижу токен, напечатанный в командной строке. Я даже проанализировал токен здесь вручную, и все в порядке, и в нем есть данные пользователя.
Почему Authlib не может проанализировать токен, когда у пользователя есть иранский IP? Это из-за санкций Google не позволяет иранцам пользоваться большинством сервисов? И как я могу изменить код, чтобы проанализировать токен другим способом?
Комментарии:
1. Что вы имеете в виду «когда у пользователя есть иранский IP»? Конечный пользователь или разработчик? Если ваш сервер (на котором выполняется код) имеет доступ к Google, он будет хорошо анализировать токен id.
2. @lepture я имею в виду конечного пользователя. Но, как я вижу сейчас, конечный пользователь имеет доступ к Google и может видеть страницу аутентификации Google, но возникает ошибка, о которой я упоминал. Я надеюсь найти способ parse_id_token по-другому, не используя эту функцию.