Re: HTTP_AUTHORIZATION header



Well, let's see what we have here. You say:
1. your configuration is correct
2. you are fairly certain it is not the network nor proxy
3. it is not the application because it works fine on Apache
4. there are no custom ISAPI DLLs installed
--> So the issue must be an IIS bug

I say:
1. Given your repro steps, I cannot reproduce it
2. Given your observations, it does not make sense with any Basic/NTLM
authentication sequence. IIS cannot derive AUTH_TYPE and AUTH_USER without
HTTP_AUTHORIZATION.
3. My XP Pro does not have pwsdata nor ASP.Net 2.0 ISAPI Filters
--> I think there is misconfiguration or custom code running somewhere

I'm pretty certain the form, POST, and two virtual directories are not
relevant to the issue, but you can verify. You should be able to reproduce
this in your setup by directly accessing the CGI EXE a couple of timems.

--
//David
IIS
http://blogs.msdn.com/David.Wang
This posting is provided "AS IS" with no warranties, and confers no rights.
//

"AWillemsen" <AWillemsen@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:82B422B8-3D84-4989-AB80-9CC41CA8285B@xxxxxxxxxxxxxxxx
I've installed Apache 2.0, and set up a mirror configuration to IIS, i.e.
the
aliases point to the same physical directories. With Basic
authentication,
Apache works fine, i.e. the HTTP_AUTHORIZATION header gets sent every time
to
the CGI.

The only differences between the two Web servers are as follows:

1) Apache is on port 8080, IIS is on port 80

2) Apache is using credential files, IIS is using the local user accounts
(my machine is not part of a domain)

Thanks, Andrew


"David Wang [Msft]" wrote:

I cannot reproduce your claims on my XPSP2 IIS5.1 based on your
instructions. So, I believe your observations are isolated to just your
network.

I used both WFetch and IE6.

I use WFetch to make a Basic authenticated POST request against my CGI
EXE
which returns HTTP_AUTHORIZATION (amongst many other server variables and
environment variables).

My CGI returns HTTP_AUTHORIZATION on first and every response.

I see the expected HTTP_AUTHORIZATION on all IE6-based Basic requests,
too.

What I suspect is happening in your situation are:
1. Your server is not configured how you think. Make sure AuthFlags is
correct value for your URL
2. A misconfiguration in your networking. Maybe proxy server is doing
NTLM
for you somehow
3. A custom ISAPI Filter on the server that is munging the Authorization:
header according to arbitrary logic

FYI: Nitpick on your stated understanding of authentication protocols -
Authorization: header is not expected for every request for NTLM
authentication request.
- It is required for every Basic authenticated request (since HTTP is
stateless, the fact that one request is basic authenticated means nothing
for the subsequent request, hence all requests must send Authorization:
header for Basic authentictaion
- It is required for initial NTLM handshake and not required thereafter
(NTLM uses TCP connection as state. Thus after first authenticated
request,
all subsequent requests over the same connection is considered
authenticated
and hence Authorization: header is not required for those subsequent
requests).

--
//David
IIS
http://blogs.msdn.com/David.Wang
This posting is provided "AS IS" with no warranties, and confers no
rights.
//

"AWillemsen" <AWillemsen@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:21DD82C6-74A2-4EEC-8D77-33C2159BA543@xxxxxxxxxxxxxxxx
I do not believe IIS is distinguishing between the two cases you
mention.
If
I authenticate by displaying the HTML page containing the form, then it
does
not matter whether I execute the form or type the address of the CGI
in -
both result in the HTTP_AUTHORIZATION header not being sent to the CGI.
IIS
passes the AUTH_TYPE and AUTH_USER (for Basic) headers, so the browser
has
definitely authenticated. But it does not pass the HTTP_AUTHORIZATION
header
on the first form or CGI execution. This happens in both IE 6 and
Firefox
1.5, and on multiple client machines, so I don't think it's client
variation.
I have also tried it on two other server machines, both running IIS
5.0,
and
it happens there too.

I do understand the authentication protocols involved, and I do expect
the
HTTP_AUTHORIZATION header to be sent on every request, regardless of
whether
Basic or NTLM is used. And this does indeed happen - once the header
is
sent, it is always sent.

From what I've seen, this does appear to be a bug in IIS...


"David Wang [Msft]" wrote:

Can you explain how IIS can distinguish between you directly typing in
the
address of the CGI in the address bar vs the FORM submit.

The answer is -- IIS cannot distinguish between those two cases. Thus,
if
you see different behavior in those two situations, it's either
client-side
variation or misunderstanding of the authentication protocol involved.

For NTLM, I do not expect HTTP Authorization header to be sent on the
second
and subsequent requests after the initial negotiation completes.

For Basic, I expect the HTTP Authorization header to be sent on all
requests.

--
//David
IIS
http://blogs.msdn.com/David.Wang
This posting is provided "AS IS" with no warranties, and confers no
rights.
//

"AWillemsen" <AWillemsen@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:47D24246-0A0F-4592-BA23-91A29232F5CF@xxxxxxxxxxxxxxxx
I am running IIS 5.1 on XP SP2. I have two virtual directories in
the
same
Web site that have anonymous access disabled - one contains HTML
pages
and
the other contains a CGI executable. One of the HTML pages has a
form
which
executes the CGI.

If I open a new browser window, and then open the HTML page with the
form,
I
get asked for credentials (as expected). I then submit the form
which
executes the CGI. The first 2 times I do this, IIS passes to the
CGI
the
AUTH_TYPE variable with the correct value (Basic or Negotiate,
depending
on
which authentication scheme I have set up) but it does not pass the
HTTP_AUTHORIZATION variable. The 3rd and subsequent times, both
variables
get passed.

Is this a bug in IIS?

Note that I tried authenticating against the CGI first, by opening a
new
browser window and typing in the address of the CGI in the address
bar.
This
asked me for credentials, as expected. If I then go to the HTML
form
and
submit it, the HTTP_AUTHORIZATION header gets passed to the CGI
every
time.









.



Relevant Pages

  • Re: HTTP_AUTHORIZATION header
    ... I use WFetch to make a Basic authenticated POST request against my CGI EXE ... Nitpick on your stated understanding of authentication protocols - ... header is not expected for every request for NTLM ...
    (microsoft.public.inetserver.iis.security)
  • Re: HTTP_AUTHORIZATION header
    ... HTML file from one virtual directory, and then immediately execute a CGI from ... Authentication happens when I request the HTML ... header is not expected for every request for NTLM ...
    (microsoft.public.inetserver.iis.security)
  • Re: Script access - IIS 6
    ... does this CGI depend on PATH_INFO or not? ... I made a request to http://localhost/ and http:/localhost/test.cgi under ... I have used Basic and Windows Integrated Authentication. ... ScriptEngine. ...
    (microsoft.public.inetserver.iis.security)
  • Re: HTTP_AUTHORIZATION header
    ... With Basic authentication, ... I use WFetch to make a Basic authenticated POST request against my CGI EXE ... Nitpick on your stated understanding of authentication protocols - ...
    (microsoft.public.inetserver.iis.security)
  • Re: The server committed a protocol violation
    ... an override to the GetWebRequestmethod which adds the header there. ... Still haven't looked at NTLM though. ... WebRequest request = base.GetWebRequest; ... Basic authentication below -- good luck with NTLM!). ...
    (microsoft.public.windowsce.embedded)