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

Swift中Firebase微软登录"Client is public"错误的解决方法

解决Firebase微软登录报错:"Client is public so neither 'client_assertion' nor 'client_secret' should be presented."

这个错误的核心原因是你的Azure AD应用被配置为公共客户端(如iOS移动端),但Firebase或Azure端的配置仍在尝试使用客户端密钥(client_secret),而公共客户端类型的应用不需要也不允许提交客户端密钥。以下是分步解决方案:

1. 修正Azure AD应用配置

  • 登录Azure门户,找到你的应用注册,进入「认证」页面
  • 滚动到「高级设置」,将「允许公共客户端流」设置为「是」
  • 进入「证书和密码」页面,删除所有已添加的客户端密码(公共客户端无需此配置)
  • 确认「重定向URI」已添加Firebase控制台中微软提供商给出的回调地址(格式通常为https://<你的Firebase项目ID>.firebaseapp.com/__/auth/handler)

2. 调整Firebase控制台微软提供商配置

  • 进入Firebase控制台,打开你的项目 → 「Authentication」→「登录方法」→ 编辑微软提供商
  • 仅保留「客户端ID」,清空「客户端密钥」输入框,保存配置

3. 优化Swift登录代码

确保代码适配公共客户端的授权流程,可添加明确的响应类型参数:

let provider = OAuthProvider(providerID: "microsoft.com")
provider.customParameters = [
    "prompt": "consent",
    "tenant": "YOUR_TENANT_ID",
    "response_type": "code" // 明确指定授权码流程,适配公共客户端
]
// 添加必要的权限范围,根据业务需求调整
provider.scopes = ["User.Read"]

provider.getCredentialWith(nil) { credential, error in
    guard let credential = credential, error == nil else {
        let alert = UIAlertController(title: "登录失败", message: "请重试", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "确定", style: .default))
        self.present(alert, animated: true)
        return
    }
    
    Auth.auth().signIn(with: credential) { authResult, error in
        if let error = error {
            print("*********ERROR************")
            print(error)
            print("*********ERROR************")
            let alert = UIAlertController(title: "登录失败", message: "请重试", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "确定", style: .default))
            self.present(alert, animated: true)
            return
        }
        
        guard let authResult = authResult else { return }
        // 登录成功后的业务逻辑
        print("用户登录成功:\(authResult.user.uid)")
    }
}

额外排查步骤

  • 更新Firebase Auth SDK:在Podfile中确保pod 'Firebase/Auth'为最新版本,执行pod update Firebase/Auth后重新构建项目
  • 清除Xcode缓存:执行「Product」→「Clean Build Folder」,避免旧配置残留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:43:18