Am 09.04.2014 um 19:31 schrieb Tobias Bocanegra <tri...@apache.org>:

> oh another use case: login with case-insensitive user id.
> 
> this is similar in that respect, that the 'id' in the credentials used
> to login, is not (or must not be) identical to the userid of the
> resolved authorizable.
> but the question is, where would this be configured? on all login modules?

This is also LoginModule specific IMHO

Regards
Felix


> 
> regards, toby
> 
> On Wed, Apr 9, 2014 at 12:14 AM, Felix Meschberger <fmesc...@adobe.com> wrote:
>> Hi
>> 
>> Am 09.04.2014 um 09:09 schrieb Tobias Bocanegra <tri...@apache.org>:
>> 
>>>>> we could solve this transparently for all login modules that extend
>>>>> from AbstractLoginModule with a general processCredentials() method
>>>>> that extracts the userid and/or domain specifier. but I would favor a
>>>>> more general credentials -> userid mapping. for example to support the
>>>>> use case to login with an email address but having a different userid.
>>>> 
>>>> So you propose special casing for the windows domain mechanism. What if 
>>>> users login with an absolute LDAP/X.500 DN ? Would you extend the special 
>>>> casing to support extracting the CN ? What if the CN is not the actual 
>>>> user ID ?
>>> 
>>> well, I think then the authenticator should use different credentials.
>> 
>> If the user provides user name and password ? Absolutely not. If the user is 
>> presenting user name, password and some 3rd party OTP or such, absolutely.
>> 
>> Interpreting the provided user name ? Probably not. That's not the business 
>> of the authentication handler, since to the handler the user name is an 
>> opaque string of characters.
>> 
>>> however, mapping the DN to as userid would be job of the login module.
>>> i.e. provide the userid for session.getUserId() and populate the
>>> subject with the correct principals.
>> 
>> As is mapping the domain/user name to a userid. Same game.
>> 
>>> 
>>>> The whole point of having LoginModule is to have this transparent and 
>>>> extensible. You don't want to code special cases in a common abstract base 
>>>> class again.
>>> 
>>> yes, but we (currently) have 3 login modules: default, token, external
>>> (and adobe granite has SSO).
>>> all of them would need to handle the windows domain (well, maybe not
>>> the token lm).
>> 
>> Probably not. I would think LoginModules can or cannot handle. If one module 
>> cannot handle, it cannot authenticate. Depending on how the module is 
>> configured into the system (required or sufficient), login may succeed or 
>> not.
>> 
>> Regards
>> Felix
>> 
>>> 
>>> regards, toby
>>> 
>>>> 
>>>> Regards
>>>> Felix
>>>> 
>>>>> 
>>>>> regards, toby
>>>>> 
>>>>>> 
>>>>>> Just my $.02.
>>>>>> 
>>>>>> Regards
>>>>>> Felix
>>>>>> 
>>>>>> Am 08.04.2014 um 09:15 schrieb Angela Schreiber <anch...@adobe.com>:
>>>>>> 
>>>>>>> hoi
>>>>>>> 
>>>>>>> variant 2 only works if you just have a single IdentityProvider
>>>>>>> configured with your external login module, right?
>>>>>>> 
>>>>>>> based on how we deal with these situations otherwise in Oak and in
>>>>>>> particular in the security area, i would feel more comfortable if we
>>>>>>> at some point had the ability to support multiple IdentityProvider
>>>>>>> implementations.
>>>>>>> in particular since the external login module is no longer specific
>>>>>>> for a particular backend but very generic and just uses the configured
>>>>>>> IdentityProvider to perform the JAAS login.
>>>>>>> 
>>>>>>> IMO are different ways on how to achieve this: if we thing of having
>>>>>>> 2 identity provider implementations we could either have 2 entries in
>>>>>>> the JAAS config listing the ExternalLoginModule with different
>>>>>>> configuration (i.e. IdentityProvider implementation) or we had 1 single
>>>>>>> entry but a composing IdentityProvider that manages both identity
>>>>>>> providers.
>>>>>>> 
>>>>>>> for either possibility the domain information would be needed in the
>>>>>>> login module and i see the following possibility to get this:
>>>>>>> 
>>>>>>> A. define an attribute on the SimpleCredentials that contains the 
>>>>>>> domain.
>>>>>>> B. define a dedicated Credentials interface extending from
>>>>>>> SimpleCredentials
>>>>>>> which specifically allows to obtain the domain information.
>>>>>>> C. the domain is part of the userId exposed by SimpleCredentials and
>>>>>>> extracted during the login call only (this is your variant 1).
>>>>>>> 
>>>>>>> from my point of view 1/C looks a quite troublesome as it requires to
>>>>>>> add some magic to the userId, which is properly understood and handled
>>>>>>> by a single login module only (assuming that we would not want the
>>>>>>> domain to be stored as part of the userID of the synchronized user).
>>>>>>> 
>>>>>>> A/B would be compatible with your proposal 2 below without loosing the
>>>>>>> domain information... i have slight preference for B as it would allow
>>>>>>> to separate the domain information from other credentials attributes.
>>>>>>> since the ExternalLoginModule could handle both SimpleCredentials
>>>>>>> without domain information attribute as you suggested) and the
>>>>>>> new domain-SimpleCredentials, we can easily enhance the
>>>>>>> SSOAuthenticationHandler
>>>>>>> and ExternalLoginModule after 1.0 to fully support different
>>>>>>> domains/IdentityProviders
>>>>>>> during repository login.
>>>>>>> 
>>>>>>> would that make sense to you?
>>>>>>> 
>>>>>>> kind regards
>>>>>>> angela
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> On 07/04/14 20:26, "Tobias Bocanegra" <tri...@apache.org> wrote:
>>>>>>> 
>>>>>>>> Hi,
>>>>>>>> 
>>>>>>>> I have an issue where the user tries to login using credentials that
>>>>>>>> include a windows domain in the userid attribute. for example:
>>>>>>>> "MYDOMAIN\toby".
>>>>>>>> 
>>>>>>>> I'm not sure which layer should handle the domain part correctly, and
>>>>>>>> I think it really depends on the setup. also, I'm not an AD expert and
>>>>>>>> I don't know how the domain part would be used (selecting a "forest"
>>>>>>>> in the AD server? or selecting a different AD server?).
>>>>>>>> 
>>>>>>>> the problem especially comes up in SSO situations, where the
>>>>>>>> LOGON_USER is passed over to a web application (e.g. sling) that then
>>>>>>>> uses the repository.
>>>>>>>> 
>>>>>>>> I can imagine the following scenarios:
>>>>>>>> 
>>>>>>>> a) domain is constant/does not apply/or is a leftover from the SSO. so
>>>>>>>> the repository does not (and never will) know about domains.
>>>>>>>> 
>>>>>>>> b) domain is part of the userid, i.e. effectively selects a different
>>>>>>>> user, but the same AD is used for all external accounts
>>>>>>>> 
>>>>>>>> c) domain is part of the userid, but the domain also selects different
>>>>>>>> ADs.
>>>>>>>> 
>>>>>>>> Right now, the external login module does not handle the domain
>>>>>>>> specifier specifically, so would behave like (b) - although I think
>>>>>>>> that the user would not be found on the AD via LDAP the way it is
>>>>>>>> currently built.
>>>>>>>> 
>>>>>>>> Also, for a simple SSO setup, where the authentication module of the
>>>>>>>> web app retrieves the LOGON_USER, I think the domain should be
>>>>>>>> stripped there and not being included in the jcr credentials.
>>>>>>>> 
>>>>>>>> so this basically boils down to the question:
>>>>>>>> 
>>>>>>>> 1) should we implement special handling for windows domain specifiers
>>>>>>>> in the login modules?
>>>>>>>> 2) should we ignore windows domain and delegate this work to the JCR
>>>>>>>> client? (e.g. the sling authentication handler should strip off the
>>>>>>>> domain when building the jcr credentials)
>>>>>>>> 
>>>>>>>> I think as long as the domain is not part of the user
>>>>>>>> selection/authentication, we should do 2).
>>>>>>>> 
>>>>>>>> WDYT?
>>>>>>>> Regards, Toby
>>>>>>> 
>>>>>> 
>>>> 
>> 

Reply via email to