在使用Passport认证的网站返回401错误代码
发表于 2006-11-23 05:46 PM 作者: Innocentius
最近做的一个ASP.NET项目使用了Passport认证,但是与常规使用Passport的网站不同,如果认证失败应当返回401而不是重定向到Passport网站或者返回什么提示重定向的HTML。
这件事情困扰了我好久,我就不明白为什么将 StatusCode 设置为 401,但是实际客户端得到的居然是 200。查阅了所有 Passport SDK 文档也没有结果,最后只能祭器最终法宝:.NET Reflector,看看到底是怎么回事。
在 System.Web.Security.PassportAuthenticationModule 中的代码显示出,它的 OnLeave 方法被连接到 WebApplication 的 EndRequest 事件上。在这个方法中有下面的代码:
果然它对 401 做了特殊的处理,替换成 200 了。现在原因找到以后要解决就容易很多。第一个 if 语句中有 5 个判断条件,并且全部是 &&。只要破坏其中一个即可。最终,在我设置 StatusCode 为 401 的同时将 HttpContext.User 设置为 null,这个问题即告解决!
这件事情困扰了我好久,我就不明白为什么将 StatusCode 设置为 401,但是实际客户端得到的居然是 200。查阅了所有 Passport SDK 文档也没有结果,最后只能祭器最终法宝:.NET Reflector,看看到底是怎么回事。
在 System.Web.Security.PassportAuthenticationModule 中的代码显示出,它的 OnLeave 方法被连接到 WebApplication 的 EndRequest 事件上。在这个方法中有下面的代码:
代码:
HttpContext context1 = application1.Context; if ((PassportAuthenticationModule._fAuthChecked && PassportAuthenticationModule._fAuthRequired) && (((context1.User != null) && (context1.User.Identity != null)) && (context1.User.Identity is PassportIdentity))) { PassportIdentity identity1 = (PassportIdentity) context1.User.Identity; if ((context1.Response.StatusCode == 0x191) && !identity1.WWWAuthHeaderSet) { if (((PassportAuthenticationModule._LoginUrl == null) || (PassportAuthenticationModule._LoginUrl.Length < 1)) || (string.Compare(PassportAuthenticationModule._LoginUrl, "internal", StringComparison.Ordinal) == 0)) { context1.Response.Clear(); context1.Response.StatusCode = 200; if (!ErrorFormatter.RequiresAdaptiveErrorReporting(context1)) { string text1 = context1.Request.Url.ToString(); int num1 = text1.IndexOf(‘?’); if (num1 >= 0) { text1 = text1.Substring(0, num1); } string text2 = identity1.LogoTag2(HttpUtility.UrlEncode(text1, context1.Request.ContentEncoding)); string text3 = SR.GetString("PassportAuthFailed", new object[] { text2 }); context1.Response.Write(text3); } else { ErrorFormatter formatter1 = new PassportAuthFailedErrorFormatter(); context1.Response.Write(formatter1.GetAdaptiveErrorMessage(context1, true)); } }
评论总数 0
评论
发表评论 |
作者为 Innocentius 的最新文章
- 在使用Passport认证的网站返回401错误代码 (2006-11-23)
- 一个怪异的服务器问题 (2006-08-21)
- C++ XML 序列化器 (2006-08-04)
- sscli 2.0 简介 (2006-05-10)
- PScript 脚本(进一步的特征) (2006-04-18)




