The Negotiate Authentication handler cannot be used on a server that directly supports Windows Authentication.
I got this exception that doesn't appear anywhere on Google while I was debugging a .NET Core web app. You just have to enable Windows Authentication in the project properties (Debug tab). Duh!
System.InvalidOperationException: The Negotiate Authentication handler cannot be used on a server that directly supports Windows Authentication. Enable Windows Authentication for the server and the Negotiate Authentication handler will defer to it.
at Microsoft.AspNetCore.Authentication.Negotiate.PostConfigureNegotiateOptions.PostConfigure(String name, NegotiateOptions options)
at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
at Microsoft.Extensions.Options.OptionsMonitor`1.<>c__DisplayClass11_0.<Get>b__0()
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at System.Lazy`1.get_Value()
at Microsoft.Extensions.Options.OptionsCache`1.GetOrAdd(String name, Func`1 createOptions)
at Microsoft.Extensions.Options.OptionsMonitor`1.Get(String name)
at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.InitializeAsync(AuthenticationScheme scheme, HttpContext context)
at Microsoft.AspNetCore.Authentication.AuthenticationHandlerProvider.GetHandlerAsync(HttpContext context, String authenticationScheme)
at Microsoft.AspNetCore.Authentication.AuthenticationService.ChallengeAsync(HttpContext context, String scheme, AuthenticationProperties properties)
at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
This translates to a change in Properties/launchSettings.json like this:
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": true,
//...
},
//...
}
Comments
Here's the REAL answer to this issue: After much hair pulling and config changes through the night, I discovered a simple setting in IIS that needs to be enabled (completely missing from BOL). First off, just because you installed Windows Authentication with Server Manager, doesn't mean it's enabled in IIS. It's NOT, by default. You have to open IIS Manager, click on your server (NOT the website - the name of the server machine hosting IIS). Then click on Authentication - you will see "Windows Authentication" is disabled. Enable it. Now it will work.
DaveDid everything MS said to do (hosting bundle, IIS configuration, etc). It&#39;s 100% picture perfect. DotNet5 &amp; 6 sites work perfectly, so long as they don&#39;t use Windows Authentication. I believe that Core will not support Windows authentication on Windows Server 2012 R2. Looks like this &quot;feature&quot; is done on purpose to force an upgrade to Windows Server 2016 and up (or Azure).
Angry Blazor DeveloperThat&#39;s the question I have! How do I make it run as a self-hosted exe?
Scotty Mac DevThis article on Microsoft&#39;s site should help out: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth Check out the last section.
SideriteThanks, this makes it work in Visual Studio debugger using IIS. But let&#39;s say you plan on self hosting this as an EXE and not running it through IIS. Any ideas on how to fix that?
Christopher P Painter