【发布时间】:2021-08-25 04:39:02
【问题描述】:
我正在尝试仅在我的 ASP.NET Core MVC 应用程序中对子路由配置 Windows 身份验证。
我的问题是当我添加时
services.AddAuthentication().AddNegotiate()
我收到一个错误
协商身份验证处理程序不能在直接支持 Windows 身份验证的服务器上使用。
这导致我添加 web.config 作为文档解释:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="false" />
<windowsAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
</location>
</configuration>
并且错误消失了。但是,现在每个请求都会弹出 Windows 身份验证。
我尝试将位置路径更改为.testendpoint,但这会在基本路径中引发原始错误。
那么有可能吗?我该如何做到这一点?只有/testendpoint 会要求 Windows 身份验证,而应用程序的其余部分将与我在 ASP.NET Core 应用程序中配置的任何其他身份验证一起使用?
【问题讨论】:
-
从几周前通过类似研究收集到的非常浅薄的知识来看(我面临着类似的情况,如果协商/NTLM 失败,应用程序应该回退到 cookie 身份验证)我不认为这是可能的,因为 Windows 身份验证发生在服务器而不是应用程序级别。但我很乐意被证明是错误的。
-
我正在取得进展,annonymousauthentication=true 还允许服务器在服务器级别失败时传递并使用 cookie,并形成 aspnet 核心我可以挑战协商身份验证架构并触发 Windows 身份验证它带有 ntlm 的索赔主体。所以我基本上是在创建一个登录路由,根据我从 ntlm 获得的信息来挑战和登录应用程序 cookie
-
我自己回来篡改它,@pfx's 绝对是这里的正确答案。只要启用了“匿名”和“Windows”身份验证(在 IISExpress 上使用自定义 Cookie 和协商身份验证进行测试),它就可以像 IISExpress 上的魅力一样工作。从中间件或类似的内部调用方案挑战的手动方法如下所示。
标签: asp.net-core .net-core windows-authentication