跨多台独立客户服务器实现Google OAuth2是否可行
标准Google OAuth2流程要求提前预置固定重定向URI的限制,完全可以通过架构设计绕开,不需要强制使用SAML,目前生产环境落地成熟的方案有三类:
动态重定向白名单方案
核心逻辑是把所有客户实例的OAuth回调路径做统一约定,比如固定为/auth/google/callback,仅域名部分随客户部署环境变化。你方可以通过Google OAuth管理接口,在客户完成实例部署后,将客户实例的完整回调地址动态添加到官方OAuth客户端的重定向URI白名单中。如果客户量级较大,可以配套做自助配置入口,客户提交自己的实例域名后系统自动完成白名单校验与添加,无需人工介入。单OAuth客户端支持的重定向URI上限为1000条,客户量超过阈值时按区域/客户等级拆分多个客户端分摊配额即可。全局中转代理方案
你方单独部署一套固定地址的OAuth回调中转服务,将该中转地址(比如https://auth.your-main-domain.com/google/callback)提前配置为Google OAuth客户端的唯一固定重定向URI,无需为每个客户单独配置白名单。客户实例发起授权请求时,在state参数中加密存入自身实例标识、回调地址、CSRF校验串,Google完成认证后会将授权码统一跳转至中转服务。中转服务解密校验请求合法性后,直接通过302跳转将授权码传递给对应客户实例的回调接口,后续换token、校验用户信息的逻辑和标准OAuth流程完全一致。注意state参数必须做签名加密,禁止明文传递实例地址,避免被恶意构造做钓鱼跳转。客户自持凭证方案
你方无需维护全局统一的OAuth客户端,仅在产品中预置标准Google OAuth2对接逻辑,给客户开放配置入口,由客户自行在自身的Google Cloud/Workspace控制台创建OAuth客户端,将自己拿到的Client ID、Client Secret填入自部署实例的配置项中,同时自行在Google控制台添加自身实例的回调地址到白名单即可。这个方案运维成本最低,完全不需要你方做白名单维护或中转服务部署,适合有自主IT运维能力、对数据隔离要求高的客户,配套一份图形化配置引导文档即可降低客户操作门槛。
选型参考:
追求最低客户操作成本、客户规模在数千以内选动态白名单方案;客户规模大、需要统一管控授权链路选全局中转代理方案;客户普遍具备运维能力、强数据隔离要求选客户自持凭证方案。
内容的提问来源于stack exchange,提问作者Jonathon Chambers

