Web API 2 Windows身份验证会不断提示登录

时间:2016-10-28 15:46:26

标签: c# asp.net authentication iis asp.net-web-api

我在Windows 10上使用Visual Studio 2015和IIS 10.0进行了基本的Web API 2设置.401个请求(窗口身份验证)不断提示我登录。我可以登录,它接受我的凭据,但我做的任何事情都没有摆脱这个提示。

我有:

  • <authentication mode="Windows" />
  • 下的web.config中添加了<system.web>
  • 通过IIS禁用匿名身份验证
  • 通过IIS启用Windows身份验证

我是否需要添加到我的控制器或WebApiConfig中以请求/ api / core / getweatherdata这样的URL而不提示登录?

4 个答案:

答案 0 :(得分:0)

我可以想到可能发生的两种情况。

  1. IIS应用程序池用户设置不正确,并且不知道要模拟的人员。 (IIRC应将其设置为NETWORK SERVICE)Reference Here

  2. 您使用的地址不是内联网,然后要求进行身份验证。 Reference Here

答案 1 :(得分:0)

您很可能只需要更改计算机上的设置。要使Windows身份验证在没有提示的情况下工作,您需要相应地配置Internet选项。

控制面板&gt;互联网选项&gt;安全选项卡&gt;选择正确的“区域”&gt;自定义级别&gt;滚动到底部。

enter image description here

答案 2 :(得分:0)

T 由于 401拒绝访问

,很可能出现在Windows身份验证上的提示窗口

虽然我不确定一些强制性问题,但能够说明完全相同的理由,如

A - 此处使用的身份验证提供程序是什么?

B - 您是否需要Kerberos?你是否使用自定义标识?

我认为使用Kerberos身份验证作为Windows身份验证的提供商是最佳选择,请确保以正确的方式执行以下所有步骤小心 < / p>

1-在Active Directory上创建自定义帐户,从AD属性上的委派选项卡委派此帐户以确保其可以使用Kerberos

2-将此自定义标识用作应用程序池自定义标识用户,转到应用程序池,选择应用程序池,右键单击,自定义标识并设置刚刚创建的用户。

3-转到应用程序身份验证选项卡,禁用除Windows身份验证之外的所有authentication providers,包括模拟(不仅是匿名)

4-右键单击Windows身份验证,选择提供程序,然后选择&#34; Negotiate / Kerberos&#34;作为它下面的主要提供者&#34; Negotiate&#34; Authentication Providers

5-设置服务原则名称,打开CMD,将SPN设置为服务帐户,以便服务帐户为&#34; lab \ testuser&#34;和服务器域是&#34; server1A&#34;其FQDN(完全合格的域名)是&#34; server1A.test.com&#34; 输入以下命令:

setspn -s server1A lab\testuser
setspn -s server1.test.com testuser
  

清除Kerberos缓存票非常重要,因为   很多时候你会做出改变,但你不会发现它有任何影响   除了清除缓存后,你需要使用[KLIST工具] [3]   通过键入命令klist purge

来清除它

然后您需要清除DNS缓存,通过在CMD上键入以下命令重新启动IIS&#34; R un as admin &#34;

ipconfig/flushdns
iisreset 

祝您好运,如果您有任何其他问题,请告诉我,如果您需要澄清任何事情

答案 3 :(得分:0)

在VS2017中使用Web API 2进行开发并使用IIS Express时,出现了这些症状。在默认的WebApiConfig.cs中,有这个卡盘:

 // Web API configuration and services
 // Configure Web API to use only bearer token authentication.
 config.SuppressDefaultHostAuthentication();
 config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

config.SuppressDefaultHostAuthentication();是阻止web.config(我猜想是IIS)身份验证细节的方法。在我的情况下,注释掉该行确实可以解决问题,在web.config中是这样的:

<security>
      <authentication> 
        <anonymousAuthentication enabled="false"/>
        <windowsAuthentication enabled="true"/>
      </authentication>
    </security>

请记住,这不能解决“双跳”情况,即网站上经过身份验证的用户将凭据传递给后端API ...但这是另一回事。