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

iOS WebView封装应用中Google OAuth认证403错误求助

解决iOS模拟器中WKWebView Google OAuth 403错误的简易办法

方案1:修改WKWebView的User-Agent(快速临时解决)

Google OAuth会拦截非标准浏览器的User-Agent,把WKWebView的UA改成Safari格式即可绕过限制:

let webConfiguration = WKWebViewConfiguration()
// 模拟iOS Safari的User-Agent,可根据模拟器iOS版本调整
let safariUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1"
webConfiguration.applicationNameForUserAgent = safariUserAgent

let webView = WKWebView(frame: .zero, configuration: webConfiguration)
// 后续加载localhost:3000的逻辑保持不变

方案2:使用ASWebAuthenticationSession(官方推荐,更安全)

苹果官方提供的ASWebAuthenticationSession专门用于第三方认证,不会触发Google的UA限制,步骤如下:

  1. 导入AuthenticationServices框架:
import AuthenticationServices
  1. 触发认证流程(替代直接在WKWebView中加载登录页):
// 替换为你的Google OAuth客户端ID和回调地址
let authURL = URL(string: "https://accounts.google.com/o/oauth2/v2/auth?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code&scope=openid%20email%20profile")!
let callbackURLScheme = "YOUR_REDIRECT_SCHEME" // 需与Google控制台配置的回调地址一致

let session = ASWebAuthenticationSession(url: authURL, callbackURLScheme: callbackURLScheme) { callbackURL, error in
    guard let callbackURL = callbackURL, error == nil else {
        // 处理认证错误
        return
    }
    // 解析回调URL中的授权码,传给localhost:3000后端完成认证
    let code = URLComponents(url: callbackURL, resolvingAgainstBaseURL: false)?
        .queryItems?.first(where: { $0.name == "code" })?.value
    if let code = code {
        // 这里编写将code发送到Web应用认证接口的逻辑
    }
}

session.presentationContextProvider = self
session.start()
  1. 实现上下文提供协议:
extension YourViewController: ASWebAuthenticationPresentationContextProviding {
    func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
        return self.view.window ?? ASPresentationAnchor()
    }
}

方案3:配置Google OAuth客户端(适配iOS应用)

  1. 打开Google Cloud控制台,找到你的OAuth 2.0客户端ID
  2. 添加「iOS」类型客户端,填写iOS项目的Bundle ID(需与模拟器运行的App Bundle ID一致)
  3. 保存配置后,Google会允许该客户端的认证请求,避免403错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:03:17