我在Windows 10上使用Visual Studio 2015和IIS 10.0进行了基本的Web API 2设置.401个请求(窗口身份验证)不断提示我登录。我可以登录,它接受我的凭据,但我做的任何事情都没有摆脱这个提示。
我有:
<authentication mode="Windows" />
<system.web>
我是否需要添加到我的控制器或WebApiConfig中以请求/ api / core / getweatherdata这样的URL而不提示登录?
答案 0 :(得分:0)
我可以想到可能发生的两种情况。
IIS应用程序池用户设置不正确,并且不知道要模拟的人员。 (IIRC应将其设置为NETWORK SERVICE)Reference Here。
您使用的地址不是内联网,然后要求进行身份验证。 Reference Here
答案 1 :(得分:0)
您很可能只需要更改计算机上的设置。要使Windows身份验证在没有提示的情况下工作,您需要相应地配置Internet选项。
控制面板&gt;互联网选项&gt;安全选项卡&gt;选择正确的“区域”&gt;自定义级别&gt;滚动到底部。
答案 2 :(得分:0)
虽然我不确定一些强制性问题,但能够说明完全相同的理由,如
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
来清除它
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 ...但这是另一回事。