You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS服务器部署的Streamlit应用无法远程认证Google Drive API求助

解决AWS EC2上Streamlit应用Google Drive OAuth认证远程访问问题

问题根源

本地运行正常是因为Google OAuth默认用localhost作为回调地址,本地浏览器能直接访问完成授权跳转。但部署到EC2远程服务器后,用户浏览器无法访问服务器的localhost,导致授权流程中断,服务器才会提示使用--noauth_local_webserver参数。

解决方案

方案1:手动授权模式(快速临时解决)

启动Streamlit应用时添加指定参数,切换为手动输入授权码的认证模式:

streamlit run your_app.py -- --noauth_local_webserver
  • 用户触发认证后,服务器会输出一个Google授权URL,用户需复制该URL到自己浏览器打开,完成Google账号授权
  • 授权完成后,Google会返回一个授权码,用户把这个码输入到应用的终端提示框,即可完成认证

缺点:对非技术用户不友好,需要手动复制URL和输入授权码。

方案2:配置公开回调地址(生产环境推荐)

通过Google Cloud Console配置适配远程服务器的回调地址,实现自动跳转授权:

  1. 登录Google Cloud Console,进入你的项目,导航到「API和服务」→「凭据」
  2. 找到对应的OAuth 2.0客户端ID(即错误信息中的client_id),点击编辑
  3. 在「已授权的重定向URI」列表中,添加你的EC2服务器公网访问地址,格式示例:
    • 用公网IP:http://<EC2公网IP>:8501/(Streamlit默认端口为8501,需和实际端口一致)
    • 用自定义域名:https://your-domain.com/(生产环境推荐用HTTPS)
  4. 保存配置后,修改Streamlit应用代码,将Google认证客户端的redirect_uri参数设置为刚才配置的地址:
    • 若使用google-auth库:
      from google_auth_oauthlib.flow import Flow
      
      flow = Flow.from_client_secrets_file(
          'client_secrets.json',
          scopes=['https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/drive.file', 'https://www.googleapis.com/auth/drive.metadata.readonly'],
          redirect_uri='http://<EC2公网IP>:8501/'  # 替换为你的回调地址
      )
      
    • 若使用pydrive2库,修改settings.yaml中的redirect_uri字段:
      client_config:
        client_id: "你的client_id"
        client_secret: "你的client_secret"
        redirect_uri: "http://<EC2公网IP>:8501/"
      
  5. 重启EC2上的Streamlit应用,用户现在可以直接在浏览器中完成OAuth授权跳转,无需手动操作。

注意事项

  • 确保EC2安全组开放了应用使用的端口(如8501),允许外部IP访问
  • 生产环境建议配置HTTPS,避免明文传输授权信息,同时Google OAuth对HTTPS回调地址的兼容性更好
  • 授权范围(scope)保持原有配置即可,无需调整

内容的提问来源于stack exchange,提问作者lungsang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:33:25