On Tue, Sep 16, 2008 at 4:25 PM, André Warnier <[EMAIL PROTECTED]> wrote:

> Clayton Hicklin wrote:
>
>> On Tue, Sep 16, 2008 at 4:05 PM, André Warnier <[EMAIL PROTECTED]> wrote:
>>
>>  Clayton Hicklin wrote:
>>>
>>>  On Tue, Sep 16, 2008 at 3:35 PM, André Warnier <[EMAIL PROTECTED]> wrote:
>>>>
>>>>  Clayton Hicklin wrote:
>>>>
>>>>>  On Tue, Sep 16, 2008 at 3:11 PM, André Warnier <[EMAIL PROTECTED]> wrote:
>>>>>
>>>>>>  Clayton Hicklin wrote:
>>>>>>
>>>>>>   On Tue, Sep 16, 2008 at 2:40 PM, Clayton Hicklin <
>>>>>>> [EMAIL PROTECTED]>
>>>>>>>
>>>>>>>  wrote:
>>>>>>>>
>>>>>>>>  "So what I believe in this case, is that the LDAP module might,
>>>>>>>> possibly,
>>>>>>>>
>>>>>>>>  rely on the "REMOTE_USER" header that IE is sometimes sending when
>>>>>>>>
>>>>>>>>> the
>>>>>>>>> user
>>>>>>>>> is authenticated in the domain.  And that one indeed would probably
>>>>>>>>> contain
>>>>>>>>> the domain and user.  If that is the case, then a simple
>>>>>>>>> manipulation
>>>>>>>>> of
>>>>>>>>> the
>>>>>>>>> HTTP headers of the request, using standard Apache modules, might
>>>>>>>>> be
>>>>>>>>> enough
>>>>>>>>> to get just the user."
>>>>>>>>>
>>>>>>>>> I agree, I believe that is exactly what is happening.  I can verify
>>>>>>>>> that
>>>>>>>>> the REMOTE_USER server variable is set to 'domain\user' using PHP
>>>>>>>>> (echo
>>>>>>>>> $_SERVER['REMOTE_USER']).  I didn't realize that you could
>>>>>>>>> manipulate
>>>>>>>>> headers with Apache.  I will definitely look into this as it sounds
>>>>>>>>> like
>>>>>>>>> that is what I need.  Thanks.
>>>>>>>>>
>>>>>>>>> Clayton
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Tue, Sep 16, 2008 at 2:32 PM, André Warnier <[EMAIL PROTECTED]>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>  Clayton Hicklin wrote:
>>>>>>>>>
>>>>>>>>>  On Tue, Sep 16, 2008 at 1:28 PM, André Warnier <[EMAIL PROTECTED]>
>>>>>>>>>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>  Clayton Hicklin wrote:
>>>>>>>>>>
>>>>>>>>>>> [...]
>>>>>>>>>>>
>>>>>>>>>>>  Clayton,
>>>>>>>>>>>
>>>>>>>>>>>  Your first communication was a bit summarised, so I did not know
>>>>>>>>>> to
>>>>>>>>>> which
>>>>>>>>>> extent you knew the underlying tidbits, from there my fist answer.
>>>>>>>>>>
>>>>>>>>>> I am currently in the middle of the same kind of problematic. I
>>>>>>>>>> have
>>>>>>>>>> created an SSO solution that works at the Tomcat level, in a
>>>>>>>>>> particular
>>>>>>>>>> context, and and I am interested in a solution at the Apache
>>>>>>>>>> level,
>>>>>>>>>> just
>>>>>>>>>> like you.
>>>>>>>>>> In the process of creating the Tomcat-level solution, I have
>>>>>>>>>> learned
>>>>>>>>>> quite
>>>>>>>>>> a bit about how IE (and servers) work in that respect, and my
>>>>>>>>>> questions/opinions are guided by that.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>  I didn't mean to imply that the authentication fails "in" IE.  I
>>>>>>>>>>
>>>>>>>>>>  realize it
>>>>>>>>>>
>>>>>>>>>>> is at the server.  My issue is that I would like a seamless user
>>>>>>>>>>> experience.  IE is passing 'domain\user' due to "Windows
>>>>>>>>>>> Integrated
>>>>>>>>>>> Authentication" being turned on and it would be nice if those
>>>>>>>>>>> credentials
>>>>>>>>>>> could be used to authenticate without popping up the login
>>>>>>>>>>> dialog.
>>>>>>>>>>>
>>>>>>>>>>>  That is what should indeed happen, if the server supports the
>>>>>>>>>>> related
>>>>>>>>>>>
>>>>>>>>>>>  authentication, meaning the authentication "type" that IE is
>>>>>>>>>>>
>>>>>>>>>> trying.
>>>>>>>>>>
>>>>>>>>>>  This
>>>>>>>>>>
>>>>>>>>>>  works using the mod_auth_sspi module (which uses NTLM) but not
>>>>>>>>>> with
>>>>>>>>>>
>>>>>>>>>>  LDAP
>>>>>>>>>>
>>>>>>>>>>> authentication.
>>>>>>>>>>>
>>>>>>>>>>>  Which module are you using for this LDAP authentication ?
>>>>>>>>>>>
>>>>>>>>>>>  The reason is that with LDAP authentication, you have to
>>>>>>>>>>>
>>>>>>>>>>  specify an attribute to search for the username that is passed to
>>>>>>>>>>
>>>>>>>>>>  Apache.
>>>>>>>>>>
>>>>>>>>>>> In the case of Active Directory, this attribute is
>>>>>>>>>>> sAMAccountName.
>>>>>>>>>>>  This
>>>>>>>>>>> attribute stores the username of the Windows user.  The problem
>>>>>>>>>>> is
>>>>>>>>>>> that
>>>>>>>>>>> IE
>>>>>>>>>>> passes 'domain\user' (not just 'user') on it's first attempt at
>>>>>>>>>>> authentication.
>>>>>>>>>>>
>>>>>>>>>>>  That's where I am not so sure.  What makes you sure that this is
>>>>>>>>>>>
>>>>>>>>>>>  indeed
>>>>>>>>>>>
>>>>>>>>>> what is happening ? (I am not saying it is false, I just mean that
>>>>>>>>>> I
>>>>>>>>>> have a
>>>>>>>>>> doubt and would be interested in whether you have really verified
>>>>>>>>>> this,
>>>>>>>>>> and
>>>>>>>>>> how).
>>>>>>>>>>
>>>>>>>>>> This obviously fails which causes the login dialog to pop
>>>>>>>>>>
>>>>>>>>>>  up.  You can then just type in your username and password and
>>>>>>>>>>
>>>>>>>>>>  everything
>>>>>>>>>>
>>>>>>>>>>> works fine.
>>>>>>>>>>>
>>>>>>>>>>> I think the ultimate solution would be to modify the Apache LDAP
>>>>>>>>>>> module
>>>>>>>>>>> to
>>>>>>>>>>> accept a parameter that would optionally strip out the domain
>>>>>>>>>>> portion
>>>>>>>>>>> of
>>>>>>>>>>> the
>>>>>>>>>>> credentials that IE passes.
>>>>>>>>>>>
>>>>>>>>>>>  Yes, that kind of what you need, unless that parameter already
>>>>>>>>>>> exists
>>>>>>>>>>>
>>>>>>>>>>>  in
>>>>>>>>>>>
>>>>>>>>>> the module you are using.  It would be relatively surprising if it
>>>>>>>>>> didn't.
>>>>>>>>>> But even if it isn't available, there might be another solution,
>>>>>>>>>> stay
>>>>>>>>>> with
>>>>>>>>>> me.
>>>>>>>>>>
>>>>>>>>>>  That way, we could use IE + APACHE + Active
>>>>>>>>>>
>>>>>>>>>>  Directory (LDAP) for a seamless SSO solution.  I think this would
>>>>>>>>>> be
>>>>>>>>>>
>>>>>>>>>>  pretty
>>>>>>>>>>
>>>>>>>>>>> common in most corporate environments, which is where this is
>>>>>>>>>>> being
>>>>>>>>>>> implemented.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>  One nore thing I want to add here, is a brief summary of how web
>>>>>>>>>>>
>>>>>>>>>>>  authentication works, just in case there is a part in there that
>>>>>>>>>>>
>>>>>>>>>> isn't
>>>>>>>>>> clear
>>>>>>>>>> to you, and because there is a particular step that may play a
>>>>>>>>>> role.
>>>>>>>>>>
>>>>>>>>>> 0) we imagine that, at the beginning, the browser is just opened,
>>>>>>>>>> and
>>>>>>>>>> knows nothing yet of the URL or the server on which it resides.
>>>>>>>>>>
>>>>>>>>>> 1) browser sends a request to server for a particular URL.
>>>>>>>>>>  Because
>>>>>>>>>> the
>>>>>>>>>> browser at this stage does not know that this URL requires any
>>>>>>>>>> authentication, the request is sent without any authentication.
>>>>>>>>>> 2) the server receives this request.  It consults its
>>>>>>>>>> configuration,
>>>>>>>>>> and
>>>>>>>>>> sees that this URL requires some form of authentication and/or
>>>>>>>>>> access
>>>>>>>>>> control.  It thus verifies if the request contains this kind of
>>>>>>>>>> authentication. If yes, the request goes through and we're done.
>>>>>>>>>> 3) The request does not contain an authentication (or not one of
>>>>>>>>>> the
>>>>>>>>>> accepted type). So the server sends back to the browser a response
>>>>>>>>>> "401
>>>>>>>>>> Authorization required", along with the type of authentication
>>>>>>>>>> required
>>>>>>>>>> (NTLM, Basic, Digest are 3 possible, supported by IE), and along
>>>>>>>>>> (if
>>>>>>>>>> Basic
>>>>>>>>>> or Digest) with a "realm" (the protected "area" name on the
>>>>>>>>>> server).
>>>>>>>>>> 4) the browser receives the 401 response.  It looks at the
>>>>>>>>>> "authentication
>>>>>>>>>> type" required, and, *if it can handle that* (which may depend on
>>>>>>>>>> its
>>>>>>>>>> settings, security zone etc..) it proceeds to try that kind of
>>>>>>>>>> authentication. (If the browser cannot handle that particular type
>>>>>>>>>> of
>>>>>>>>>> authentication requested by the server, it may check if it has a
>>>>>>>>>> "fallback
>>>>>>>>>> type" that it can try. If it doesn't have such a fall-back, I do
>>>>>>>>>> not
>>>>>>>>>> know
>>>>>>>>>> really what happens, but I guess some kind of error at the browser
>>>>>>>>>> side.)
>>>>>>>>>> 5) once the browser has "put in the bag" the required pieces for
>>>>>>>>>> the
>>>>>>>>>> authentication (as requested by the server, or its fallback type),
>>>>>>>>>> it
>>>>>>>>>> re-sends the same original request to the server, but this time it
>>>>>>>>>> adds
>>>>>>>>>> an
>>>>>>>>>> "Authorization:" header with the appropriate content.
>>>>>>>>>>
>>>>>>>>>> Now, depending on the case, a back-and-forth dialog *may* take
>>>>>>>>>> place
>>>>>>>>>> between the server and the browser.  For instance, with IE and
>>>>>>>>>> NTLM
>>>>>>>>>> authentication, there are 3 such exchanges before the server and
>>>>>>>>>> browser
>>>>>>>>>> are
>>>>>>>>>> satisfied, and the browser has the right content to send in its
>>>>>>>>>> "Authorization:" header.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I am only pointing this all out so that it would be clearer that
>>>>>>>>>> it
>>>>>>>>>> is
>>>>>>>>>> important to know, for instance, *which* kind of authentication
>>>>>>>>>> the
>>>>>>>>>> LDAP
>>>>>>>>>> module is telling IE (in the 401 message) that is required.
>>>>>>>>>> Unless this LDAP module can handle an NTLM-type 3-step dialog with
>>>>>>>>>> IE
>>>>>>>>>> (like the mod_auth_sspi module can), then probably what the module
>>>>>>>>>> sends
>>>>>>>>>> is
>>>>>>>>>> a response which requires a "Basic" authentication.
>>>>>>>>>> Does IE then automatically send whatever IE thinks the
>>>>>>>>>> domain\userid
>>>>>>>>>> is
>>>>>>>>>> ,
>>>>>>>>>> as a "Authorization: Basic xxxxxxxxxxxxxxxxxx" header containing
>>>>>>>>>> the
>>>>>>>>>> user-id
>>>>>>>>>> and user password ?
>>>>>>>>>> It seems a bit far-fetched that IE would send the user's password
>>>>>>>>>> over
>>>>>>>>>> the
>>>>>>>>>> network, just Base64-encoded.
>>>>>>>>>>
>>>>>>>>>> So what I believe in this case, is that the LDAP module might,
>>>>>>>>>> possibly,
>>>>>>>>>> rely on the "REMOTE_USER" header that IE is sometimes sending when
>>>>>>>>>> the
>>>>>>>>>> user
>>>>>>>>>> is authenticated in the domain.  And that one indeed would
>>>>>>>>>> probably
>>>>>>>>>> contain
>>>>>>>>>> the domain and user.  If that is the case, then a simple
>>>>>>>>>> manipulation
>>>>>>>>>> of
>>>>>>>>>> the
>>>>>>>>>> HTTP headers of the request, using standard Apache modules, might
>>>>>>>>>> be
>>>>>>>>>> enough
>>>>>>>>>> to get just the user.
>>>>>>>>>>
>>>>>>>>>> That was a long message, but in the end the answer may be simple.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>> The official User-To-User support forum of the Apache HTTP Server
>>>>>>>>>> Project.
>>>>>>>>>> See <URL:http://httpd.apache.org/userslist.html> for more info.
>>>>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>  "   from the digest: [EMAIL PROTECTED]
>>>>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>  --
>>>>>>>>>>
>>>>>>>>>>  Clayton Hicklin
>>>>>>>>> [EMAIL PROTECTED]
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>  Sorry about top-posting on that last message (stupid Gmail :).
>>>>>>>>>
>>>>>>>>>  So, it looks like I need mod_setenvif, right?  Could anybody write
>>>>>>>> a
>>>>>>>> quick
>>>>>>>> directive that would look at REMOTE_USER to see if there is a
>>>>>>>> backslash
>>>>>>>> ("\"), and if there is, set the same variable to everything
>>>>>>>> following
>>>>>>>> the
>>>>>>>> backslash?  I think this would solve my problem.  I would rather use
>>>>>>>> mod_authnz_ldap that  mod_auth_sspi as it is included with Apache
>>>>>>>> and
>>>>>>>> is
>>>>>>>> well-supported.
>>>>>>>>
>>>>>>>>
>>>>>>>>  I would try the following, but it's mod_headers, not mod_setenvif :
>>>>>>>>
>>>>>>>>  RequestHeader edit REMOTE_USER ^(?:[^\\]+\\)(.+)$ $1
>>>>>>>
>>>>>>> the regexp should mean (if really it's a perl regexp) :
>>>>>>> - for the first () group, match but do not capture
>>>>>>> - match (potentially) from the beginning, anything before the
>>>>>>> backslash
>>>>>>> and
>>>>>>> the backslash itself, if any such things.
>>>>>>> - then match whatever is left, and capture it as $1
>>>>>>>
>>>>>>> then replace this all by $1
>>>>>>>
>>>>>>> (the fancy maybe-match stuff is just in case you *don't* get a domain
>>>>>>> sometimes)
>>>>>>>
>>>>>>> That's what I'm trying to do anyway, regexpes are painful (but nice).
>>>>>>>
>>>>>>> Please let us know if the whole solution works in the end.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> The official User-To-User support forum of the Apache HTTP Server
>>>>>>> Project.
>>>>>>> See <URL:http://httpd.apache.org/userslist.html> for more info.
>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>>  "   from the digest: [EMAIL PROTECTED]
>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>
>>>>>>>
>>>>>>>  Andre,
>>>>>>>
>>>>>>>   The regex does not compile, according to the Apache error log.  The
>>>>>> manual
>>>>>> says Apache uses PCRE, btw.  I will see if I can figure out where the
>>>>>> error
>>>>>> is.
>>>>>>
>>>>>>  Strange :
>>>>>>
>>>>>>  #!/usr/bin/perl -w
>>>>> use strict;
>>>>>
>>>>> my $RU = "domain\\user";
>>>>> $RU =~ m/^(?:[^\\]+\\)(.+)$/;
>>>>> my $user = $1;
>>>>> print "1) User : $user\n";
>>>>>
>>>>> $RU = "user";
>>>>> $RU =~ m/^(?:[^\\]+\\)(.+)$/;
>>>>> $user = $1;
>>>>> print "2) User : $user\n";
>>>>>
>>>>> exit;
>>>>>
>>>>>
>>>>> output :
>>>>>
>>>>> 1) User : user
>>>>> 2) User : user
>>>>>
>>>>>
>>>>> Maybe under Apache, it escapes the backslashes automatically by itself
>>>>> ?
>>>>> Try :
>>>>>
>>>>> ^(?:[^\]+\)(.+)$
>>>>>
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> The official User-To-User support forum of the Apache HTTP Server
>>>>> Project.
>>>>> See <URL:http://httpd.apache.org/userslist.html> for more info.
>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>  "   from the digest: [EMAIL PROTECTED]
>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>
>>>>>
>>>>>  It keeps saying "regex could not compile" even though I can get it to
>>>>>
>>>> work
>>>> in the regex tester.  Weird.
>>>>
>>>>  I think it might not like my (?:...) construct. That's probably
>>>> "extended
>>>>
>>> PCRE" stuff.
>>> Let's try another one :
>>>
>>> RequestHeader edit REMOTE_USER ^([^\\]+\\)?(.+)$ $2
>>>
>>> (hoping that $1 gets set even to '' if there is no domain)
>>> (and yes, the "replacement part" is now $2)
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> The official User-To-User support forum of the Apache HTTP Server
>>> Project.
>>> See <URL:http://httpd.apache.org/userslist.html> for more info.
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>  "   from the digest: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>>  Same error.  I wonder, does my Apache need access to a PCRE
>> implementation
>> (i.e. PERL) or is that compiled in?  Maybe that's the problem.
>>
>>  No, it has nothing to do with perl installed, it should be compiled in.
> But the current on-line documentation for mod_headers has this paragraph :
> edit
>    If this request header exists, its value is transformed according to a
> regular expression search-and-replace. The value argument is a regular
> expression, and the replacement is a replacement string, which may contain
> backreferences. Available in version 2.2.4 and later.
>
> So, maybe your version does not quite make the cut ?
>
>
>
>
> ---------------------------------------------------------------------
> The official User-To-User support forum of the Apache HTTP Server Project.
> See <URL:http://httpd.apache.org/userslist.html> for more info.
> To unsubscribe, e-mail: [EMAIL PROTECTED]
>  "   from the digest: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
Apache v 2.2.9 on Windows.

-- 
Clayton Hicklin
[EMAIL PROTECTED]

Reply via email to