如何限制Flask+BigQuery应用仅允许企业域Google账号登录?
解决Flask应用仅允许企业域Google账号登录的问题
嘿,我懂你现在的头疼点——明明按手册配置了员工认证,结果私人Gmail账号还能蹭进来,完全不符合「仅企业员工访问」的要求。别慌,咱们从两个层面来搞定这个问题:代码层面验证邮箱域名,再配合Google Cloud端的根源限制,双管齐下就能彻底解决。
第一步:从Google OAuth获取用户邮箱并验证域名
不管你是手动实现Google OAuth2登录,还是用Flask-Dance这类库,登录成功后都能从Google的用户信息接口拿到用户的邮箱。这里给你一个手动处理的示例:
from flask import Flask, redirect, url_for, session import requests app = Flask(__name__) app.secret_key = "你的应用密钥" # 记得换成真实密钥 # OAuth回调路由(假设你已经完成了OAuth客户端ID等基础配置) @app.route("/google/callback") def google_callback(): # 从session中取出Google返回的访问令牌 access_token = session.get("google_access_token") if not access_token: return redirect(url_for("login")) # 请求Google用户信息接口,获取邮箱 user_info_url = "https://www.googleapis.com/oauth2/v3/userinfo" headers = {"Authorization": f"Bearer {access_token}"} resp = requests.get(user_info_url, headers=headers) user_data = resp.json() # 提取用户邮箱 user_email = user_data.get("email") if not user_email: return "无法获取用户身份信息,请重试", 400 # 验证邮箱域名是否属于企业域 allowed_domain = "你的企业域名.com" # 替换成你的真实企业域 email_domain = user_email.split("@")[-1] if email_domain != allowed_domain: return "抱歉,仅允许企业域账号登录", 403 # 验证通过,将用户信息存入session,跳转到应用首页 session["authorized_user"] = user_email return redirect(url_for("dashboard"))
如果你用的是Flask-Dance,也可以在回调的钩子函数里做同样的域名检查,核心逻辑都是提取邮箱、拆分域名、对比验证。
第二步:在Google Cloud端做根源限制
代码验证是第二道防线,更推荐在Google Cloud Console里直接限制可访问的用户群体,从根源上阻止私人账号登录:
- 登录Google Cloud Console,进入你的项目
- 找到「API和服务」→「OAuth同意屏幕」
- 将「用户类型」设置为内部(仅限你的Google Workspace组织)
- 保存配置后,只有你的企业域内的账号才能看到并使用这个OAuth应用,私人Gmail账号连登录入口都碰不到
总结
把这两种方式结合起来:Google端限制仅内部用户可访问,应用代码再做二次域名验证,就能确保只有你的企业员工才能登录这个Flask应用了。如果遇到OAuth配置的细节问题,也可以检查下Google Cloud里的客户端ID是否关联了你的企业Workspace组织。
内容的提问来源于stack exchange,提问作者Gluz
相关产品推荐
相关产品推荐

