Asp.net mvc 是否可以跳过对Web服务器的第一个匿名请求?

Asp.net mvc 是否可以跳过对Web服务器的第一个匿名请求?,asp.net-mvc,iis,kerberos,Asp.net Mvc,Iis,Kerberos,在具有Kerberos的Web服务器上,客户端将匿名发送请求,并返回401状态。然后它再次发送相同的请求,并进行身份验证,现在返回200状态。在MVC/JavaScript/etc中设置一个web应用程序是否可能知道匿名请求是无效的,并直接请求用户身份验证?对于一个特定的例子,我使用jQuery和AJAX,它们以很短的时间间隔从服务器中提取数据 更新:我想让客户端知道发送匿名请求是没有用的,所以它可以在第一次发送带有用户名的请求。既然你完全知道你只会得到401,为什么要首先发送匿名请求呢?根据答

在具有Kerberos的Web服务器上,客户端将匿名发送请求,并返回401状态。然后它再次发送相同的请求,并进行身份验证,现在返回200状态。在MVC/JavaScript/etc中设置一个web应用程序是否可能知道匿名请求是无效的,并直接请求用户身份验证?对于一个特定的例子,我使用jQuery和AJAX,它们以很短的时间间隔从服务器中提取数据

更新:我想让客户端知道发送匿名请求是没有用的,所以它可以在第一次发送带有用户名的请求。既然你完全知道你只会得到401,为什么要首先发送匿名请求呢?

根据答案,你应该在发送回调之前使用
,然后自己添加
授权
头。

更新,因为你不需要允许匿名访问。 您可以删除默认的IIS身份验证模块和/或为特定部件添加自己的自定义HttpModule

  <location path="PathToWebApi">
    <system.web>
      <httpModules>
        <!-- default IIS HttpModules  -->
        <remove name="WindowsAuthentication"/>
        <remove name="FormsAuthentication"/>
        <remove name="PassportAuthentication"/>
        <remove name="RoleManager"/>
        <remove name="UrlAuthorization"/>
        <remove name="FileAuthorization"/>
        <remove name="AnonymousIdentification"/>
        <remove name="Profile"/>
        <add name="CustomAuthentication" type="Your.NameSpace.CustomAuthentication"/>
      </httpModules>
    </system.web>
    <system.webServer>
      <modules runAllManagedModulesForAllRequests="false">
        <add name="CustomAuthentication" type="Your.NameSpace.CustomAuthentication" preCondition="managedHandler"/>
      </modules>
  </location>

您正在寻找抢占式身份验证,这是。除非服务器向您提出质疑,否则不要发送凭据,否则您可能会向未知服务器泄露机密。

我不太明白-您想首先设置服务器以指示客户端发送身份验证请求吗?您是否使用默认[授权]属性?如何创建<代码> Cu饰属性:AuthigeAtgult允许匿名属性> /代码>。请参阅上面的更新。另外,我不希望匿名访问服务器。
我希望客户端知道发送匿名请求是没有用的,因此,它也可以在第一次发送带有用户名的请求。
没有任何请求时,客户端如何知道这件事?这不会满足OP的要求。我使用自定义IHttpModule
PreRequestHandlerExecute
事件来检查传入的请求访问令牌,然后,标头和Cookie决定是重定向匿名访问还是响应ajax请求的自定义JSON消息。我相信MVC引擎会在客户端有cookie的情况下自动做到这一点。然而,很明显,客户缺少一个是很奇怪的。但这是在vpn上,不应该成为问题。如果您的客户端是浏览器,祝您好运。他们可能不会支持,就是这样。你知道如何使用pass-through/windows身份验证而不是Basic来设置它吗?
    public void Init(HttpApplication context)
    {
        //add event listener to authenticate Http request
        //context.AuthenticateRequest += new EventHandler(AuthenticateRequest); //Session is null at AuthenticateRequest state
        context.PreRequestHandlerExecute += new EventHandler(OnPreRequestHandlerExecute);
    }