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

如何通过Microsoft.Owin获取身份验证失败的错误原因?

获取OpenID Connect身份验证失败的详细错误信息

你可以通过AuthenticationFailedNotification上下文对象的多个属性收集所有相关错误信息,包括捕获到的异常细节和身份验证协议返回的错误内容。以下是修改后的代码示例:

AuthenticationFailed = (context) =>
{
    context.HandleResponse();
    var errorBuilder = new StringBuilder();

    // 添加协议返回的错误代码和描述
    if (!string.IsNullOrEmpty(context.ProtocolMessage.Error))
    {
        errorBuilder.AppendLine($"错误代码: {context.ProtocolMessage.Error}");
        if (!string.IsNullOrEmpty(context.ProtocolMessage.ErrorDescription))
        {
            errorBuilder.AppendLine($"错误描述: {context.ProtocolMessage.ErrorDescription}");
        }
    }

    // 添加异常信息(如果存在)
    if (context.Exception != null)
    {
        errorBuilder.AppendLine($"异常消息: {context.Exception.Message}");
        // 可选:添加堆栈跟踪,仅建议在调试环境使用,避免泄露敏感信息
        // errorBuilder.AppendLine($"堆栈跟踪: {context.Exception.StackTrace}");
    }

    // 对错误信息进行URL编码,避免特殊字符破坏URL参数结构
    string error = System.Web.HttpUtility.UrlEncode(errorBuilder.ToString());
    context.OwinContext.Response.Redirect($"/Home/auth_error?error_msg={error}");
    return Task.FromResult(0);
},

关键说明:

  • context.ProtocolMessage:包含OpenID Connect协议返回的标准错误字段,Error是错误代码(如invalid_grant、access_denied),ErrorDescription是对应的详细说明,覆盖用户拒绝授权、客户端ID无效等场景。
  • context.Exception:如果身份验证过程中抛出异常(如网络问题、令牌验证失败),该属性会包含完整异常对象,可按需提取异常消息或堆栈跟踪。
  • URL编码:使用HttpUtility.UrlEncode处理错误信息,确保换行、空格、&等特殊字符不会导致URL参数失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 22:05:02