Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Recently, I've come across an interesting exception message in one of my Ad-Hoc WCF projects using .Net 4.0. The exception message is:
The HTTP request is unauthorized with client authentication scheme 'Basic', The authentication header received from the server was 'Negotiate,NTLM,Basic realm="[omitted]"'.
This exception message is a bit odd because it says my client was using Basic, and that the server only allows requests using Negotiate, NTLM, or Basic. But I used Basic, so why would it throw?
The two possibilities are:
- The username or password were wrong. This is the most obvious.
- The Auth schemes on the service don't match those supported by the host. In this case, by host, I mean IIS:
So, the host supports Anonymous, Basic, and Windows (NTLM + Negotiate). (If the host didn't support the auth mode set on the service binding, I would have gotten an activation exception.) So, a quick peek at the service binding shows that the binding set the ClientCredentialType to "Windows."
Most of the time, this wouldn't pose a problem. Especially if you are dynamically building the clients from WSDL, because the auth schemes for the binding are exposed there.