我正在使用Authlib 博客中的这篇博文将 google oauth 添加到 FastAPI 应用程序。我来自伊朗,当我的 VPN 开启时一切正常,但是当它关闭并且我尝试使用伊朗 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
,我看到命令行中打印了令牌。我什至在这里手动解析了令牌,它很好,它有用户的数据。
当用户拥有伊朗 IP 时,为什么 Authlib 无法解析令牌?是因为谷歌不允许伊朗人使用大部分服务的制裁吗?以及如何更改代码以另一种方式解析令牌?