Re: HTTP_AUTHORIZATION header



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
    ... authentication sequence. ... this in your setup by directly accessing the CGI EXE a couple of timems. ... i.e. the HTTP_AUTHORIZATION header gets sent every time ... I use WFetch to make a Basic authenticated POST request against my CGI ...
    (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)