iis Web API 2 Windows身份验证持续提示登录

mspsb9vt  于 2022-11-12  发布在  Windows
关注(0)|答案(4)|浏览(196)

我有一个基本的Web API 2设置与Visual Studio 2015沿着IIS 10.0在Windows 10. 401请求(窗口身份验证)不断提示我登录。我可以登录,它接受我的凭据,但我做什么都摆脱不了这个提示。
我有:

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

我是否需要在我的控制器或WebApiConfig中添加一些东西来请求像/api/core/getweatherdata这样的URL,而不提示登录?

0s7z1bwu

0s7z1bwu1#

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

  1. IIS应用程序集区使用者未正确设定,而且不知道要仿真的\对象。(IIRC应该设定为NETWORK SERVICE)Reference Here
    1.您正在使用的地址不是Intranet地址,它会要求进行身份验证。Reference Here
vvppvyoh

vvppvyoh2#

您很可能只需要更改计算机上的设置。若要在没有提示的情况下进行Windows身份验证,您需要相应地配置Internet选项。
控制面板〉Internet选项〉安全选项卡〉选择正确的“区域”〉自定义级别〉滚动到底部。

2ic8powd

2ic8powd3#

****Windows身份验证时出现的提示窗口很可能是由于401拒绝访问

虽然我不确定一些必答题能够告诉完全一样的原因一样

**A-**此处使用的是什么身份验证提供程序?
**B-**您是否需要Kerberos?您是否使用自定义身份?

我认为使用Kerberos身份验证作为Windows身份验证的提供程序是最佳选择,为此,请确保以正确的方式仔细执行了以下所有步骤
1-在Active Directory上创建一个自定义帐户,从“AD属性”上的“委派”选项卡委派此帐户,以确保它可以使用Kerberos
2-使用此自定义标识作为应用程序池自定义标识用户,转到应用程序池,选择您的应用程序池,右键单击,自定义标识并设置您刚创建的用户。
3-转到应用程序身份验证选项卡,禁用所有authentication providers,包括模拟(不仅是匿名),但Windows身份验证除外
4-右键单击Windows身份验证,选择提供程序,然后选择“协商/Kerberos”作为其下的主提供程序“协商”Authentication Providers
5-设置服务主体名称,打开CMD,将SPN设置为服务帐户,这样,如果服务帐户为“lab\testuser”,服务器域为“server 1A”,其FQDN(完全限定的域名)为“server1A.test.com“,则键入以下命令:

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

清除Kerberos缓存票据也非常重要,因为您将多次进行更改,并且除非清除该高速缓存,否则您不会看到它生效,因此您需要使用[KLIST工具][3],通过键入命令klist purge来清除它

然后您需要清除DNS缓存,在CMD“Run as admin”上键入以下命令重新启动IIS

ipconfig/flushdns
iisreset

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

daolsyd0

daolsyd04#

我在VS2017中开发Web API 2并使用IIS express时出现了这些症状。在默认的WebApiConfig.cs中有这样的chuck:

// 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...但这是另一回事。

相关问题