仅限企业用户的Android端Google SSO实现问题排查
排查与修正方案
一、Google Cloud Console配置排查
- 内部项目与同意屏幕验证
确认项目确实设置为内部类型(而非外部),同意屏幕的用户类型选择“内部”,且所有必填项(应用名称、隐私政策链接等)已完整配置,无遗漏项。 - 客户端ID关联与匹配检查
核对Android客户端ID的SHA1指纹和包名,确保与当前应用的签名配置完全一致(包括debug和release版本,若用debug测试需确认debug的SHA1已添加)。同时确认Web客户端ID已正确关联,未设置为仅允许特定账号访问。 - 组织权限与账号范围验证
检查Google Cloud Identity的组织设置,确保所有需登录的企业账号均属于该组织,未被排除在应用访问范围外。同时确认项目IAM权限中,企业账号所在的组织单元拥有访问该项目的权限。
二、代码逻辑修正
当前代码未限制仅企业账号登录,也未指定企业域名,这是核心问题之一。需修改GoogleSignInOptions配置并添加账号验证逻辑:
1. 配置企业域名限制
// 替换原有gso配置,添加企业域名指定 gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() // 替换为你的企业域名,例如@yourcompany.com .setHostedDomain("yourcompany.com") .build(); gsc = GoogleSignIn.getClient(this, gso);
2. 登录后验证企业账号
try { GoogleSignInAccount account = task.getResult(ApiException.class); String email = account.getEmail(); // 二次验证邮箱域名,避免配置疏漏导致非企业账号登录 if (email != null && email.endsWith("@yourcompany.com")) { navigateToSecondActivity(); } else { Toast.makeText(getApplicationContext(), "仅允许企业账号登录", Toast.LENGTH_SHORT).show(); } } catch (ApiException e) { // 可根据错误码细化提示,如12500为配置错误、10为用户取消登录等 Toast.makeText(getApplicationContext(), "登录失败: " + e.getStatusCode(), Toast.LENGTH_SHORT).show(); }
3. 适配新版ActivityResultAPI(SDK34推荐)
替换旧版onActivityResult为registerForActivityResult,提升兼容性:
// 在Activity的onCreate方法中初始化 ActivityResultLauncher<Intent> signInLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == RESULT_OK && result.getData() != null) { Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(result.getData()); try { GoogleSignInAccount account = task.getResult(ApiException.class); if (account.getEmail().endsWith("@yourcompany.com")) { navigateToSecondActivity(); } else { Toast.makeText(getApplicationContext(), "仅允许企业账号登录", Toast.LENGTH_SHORT).show(); } } catch (ApiException e) { Toast.makeText(getApplicationContext(), "登录失败: " + e.getStatusCode(), Toast.LENGTH_SHORT).show(); } } } ); // 触发登录的方法 private void startSignIn() { Intent signInIntent = gsc.getSignInIntent(); signInLauncher.launch(signInIntent); }
三、企业账号与设备排查
- 账号状态验证
确认无法登录的企业账号未被冻结、暂停,且已正确加入Google Cloud Identity组织。可尝试用该账号登录Google Workspace管理后台,验证账号状态正常。 - 设备环境测试
检查测试设备是否登录多个Google账号,可暂时仅保留需测试的企业账号重新测试;同时清除应用缓存和数据后,再次尝试登录。
内容的提问来源于stack exchange,提问作者Vasu Shanmugam
相关产品推荐
相关产品推荐

