小编Kev*_*vin的帖子

Thread.CurrentPrincipal声称不正确

我看到我的服务器上的请求似乎是由一个无关的客户端发出的,虽然我确定它们是由经过身份验证的用户制作的 - 我有fiddler日志显示客户端发送了有效的asp.net auth cookie和服务器日志表明cookie已到达且有效.所有浏览器都出现了这个问题.

数据流是:

  1. 用户访问登录URL,在属于webfarm的计算机上(所有具有相同计算机的密钥,解密密钥)
  2. 在成功的表单身份验证上,用户将重定向到受限制的URL(即其主页)
  3. 主页正确呈现,知道用户的身份,并包含javascript以执行7个异步回发以获取其他数据
  4. Javascript启动7个http.get请求,点击webfarm中的不同机器(假设循环)
  5. 服务器验证请求:~0.01%无法进行身份验证.

思考?

现在详细说明:

极少数的异步请求落在我的服务器上(有证据表明它们没有被操纵或伪造)并且似乎是匿名的.在提出的7个请求中,有些数字可能有效,也可能无效(即5/7会成功,2会失败).成功/失败似乎没有任何模式.在我的请求看起来是匿名的情况下,CurrentPrincipal.Identity记录:

Thread.CurrentPrincipal.Identity.IsAuthenticated; // false
Thread.CurrentPrincipal.Identity.Name; // null (or empty, unsure off hand)
Run Code Online (Sandbox Code Playgroud)

将http.context.request.params集合转储到日志文件中,我能够看到以下相关(和擦除)属性(下面的完整参数):

context: {"userId":10000,"userName":"johnsmith"}
HTTP_COOKIE:.ASPXAUTH=[valid auth cookie value]
HTTP_X_REQUESTED_WITH:XMLHttpRequest
X-Requested-With: XMLHttpRequest
    AUTH_TYPE: 
    AUTH_USER: 
    AUTH_PASSWORD: 
    LOGON_USER: 
    REMOTE_USER: 
    HTTP_COOKIE: .ASPXAUTH=[valid auth cookie value]
Run Code Online (Sandbox Code Playgroud)

我知道auth cookie是有效的 - 在这些相同的请求期间,我能够解密auth cookie并提取以下内容:

CookiePath: /
Expiration: 9/23/2105 8:14:22 PM
Expired: False
IsPersistent: True
IssueDate: 8/30/2010 2:54:22 PM
Name: johnsmith
UserData: 
Version: 2
Run Code Online (Sandbox Code Playgroud)

不知道如何继续这一点.我们最近迁移到mvc 2.0/asp.net 4.0似乎加剧了这个问题,但我的信心并不高.

我已经联系了一些有这个问题的客户,而且这更令人沮丧(但确实反映了我在日志中能够阅读的内容).一旦进入这种状态,就很难摆脱它.清除缓存和cookie似乎没有任何效果.但是,切换到新的浏览器,一般都可以.同样地,等待几个小时并使用相同的浏览器返回它也一般都可以,但并非总是如此.如前所述,所有浏览器都可以看到这种情况.

有什么建议?
凯文




------------
以下是我捕获的日志片段的剩余部分(为pii擦除):

8/30/2010 2:54:43 PM: …
Run Code Online (Sandbox Code Playgroud)

c# asp.net authentication asp.net-mvc forms-authentication

30
推荐指数
1
解决办法
9478
查看次数

带有css类的Html.TextBox与表单验证css冲突(输入验证错误)

有趣的情况.我有一个Html.Textbox(),我从视图中呈现如下:

<%= Html.TextBox("title", Model.Title, new { @class = "txt" }) %>
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我对标题进行了以下有些简化的验证.为了论证,假设它找到错误,并使用modelstate错误信息重新呈现视图.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditBook(string title) {
    Model = new Book(ControllerContext.RequestContext);
    if (String.IsNullOrEmpty(title))
    {
        title = String.Empty;
        ModelState.AddModelError("title", "* Title is a required");
        modelState.SetModelValue("title", ValueProvider["title"]);
    }
    else { // show confirmation }

    if (!ModelState.IsValid)
    {
        return View("EditBook", Model);
    }
}
Run Code Online (Sandbox Code Playgroud)

当页面被重新渲染时,我的html文本框正确地附加了输入验证错误类......但它没用,因为它是第一个附加的类!我需要它覆盖我的文本框上的所有现有样式.html输出如下:

<input type="text" name="title" id="title" class="input-validation-error txt"/>
Run Code Online (Sandbox Code Playgroud)

假设已定义以下css样式:

input.txt { border: 1px; color: #000 }
.input-validation-error { border: 2px solid #fff }
Run Code Online (Sandbox Code Playgroud)

问题是,我原来的css类"txt"优先,并阻止我能够正确设置错误文本框的样式.

有什么想法吗?

asp.net-mvc

0
推荐指数
1
解决办法
3192
查看次数