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

如何通过WebView2的CoreWebView2ResponseReceived事件判断API认证成功?

判断Google OAuth认证成功的核心逻辑

Google OAuth 认证成功的判断核心不在响应头,而是依赖授权流程完成后的回调URL参数,以下是具体的实现思路和代码示例:

关键判断依据

当用户完成授权操作后,Google会自动重定向到你在OAuth控制台配置的redirect_uri,并在URL的查询参数中携带以下关键信息:

  • 认证成功:URL包含code参数(授权码,用于后续换取Access Token)
  • 认证失败:URL包含error参数(比如用户拒绝授权、权限不足等)

在WebView2事件中的实现方式

方式1:使用CoreWebView2ResponseReceived事件(你当前使用的事件)

在事件中解析响应对应的请求URL,检查是否匹配回调地址并存在code参数:

private void WebView_CoreWebView2ResponseReceived(object sender, CoreWebView2WebResourceResponseReceivedEventArgs e)
{
    var requestUri = new Uri(e.Request.Uri);
    // 替换为你实际配置的回调地址
    string expectedRedirectUri = "http://localhost:5000/callback";

    if (requestUri.AbsoluteUri.StartsWith(expectedRedirectUri))
    {
        var queryParams = System.Web.HttpUtility.ParseQueryString(requestUri.Query);
        string authCode = queryParams["code"];
        string errorMsg = queryParams["error"];

        if (!string.IsNullOrEmpty(authCode))
        {
            // 认证成功:拿到授权码,可用于向Google请求Access Token
            // 这里添加你的后续逻辑(比如关闭WinForm、将code传递给Windows服务)
        }
        else if (!string.IsNullOrEmpty(errorMsg))
        {
            // 认证失败:根据error参数处理对应逻辑(如提示用户授权失败)
        }
    }
}

方式2:推荐使用CoreWebView2NavigationStarting事件

这个事件在导航开始前触发,能更早捕获回调URL,还可以取消不必要的页面加载:

private void WebView_CoreWebView2NavigationStarting(object sender, CoreWebView2NavigationStartingEventArgs e)
{
    var requestUri = new Uri(e.Uri);
    string expectedRedirectUri = "http://localhost:5000/callback";

    if (requestUri.AbsoluteUri.StartsWith(expectedRedirectUri))
    {
        e.Cancel = true; // 取消后续导航,避免打开空白的回调页面
        var queryParams = System.Web.HttpUtility.ParseQueryString(requestUri.Query);
        string authCode = queryParams["code"];

        if (!string.IsNullOrEmpty(authCode))
        {
            // 处理认证成功逻辑
        }
        else
        {
            // 处理认证失败逻辑
        }
    }
}

补充说明

  • Google OAuth的授权流程中,响应头不会携带认证成功的特殊标记,所有关键状态都通过URL参数传递,因此不要试图从响应头中判断认证状态。
  • 确保你在Google Cloud控制台中配置的redirect_uri和代码中的地址完全一致,否则会导致回调失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:43:16