Oops - you said you'd do that in the email - sorry I missed it.  What is the
issue #?

On Mon, Mar 30, 2009 at 1:08 PM, Les Hazlewood <[email protected]>wrote:

> Jeremy, you bring up some good points (caching authc info if a user wants
> us to).  Can you please open a Jira issue to address this?  That way we have
> it as a place holder during discussion.
>
>
> On Wed, Mar 25, 2009 at 1:05 PM, Jeremy Haile <[email protected]> wrote:
>
>> Maciej,
>>
>> The problem is that if the LDAP server requires credentials to login (as
>> they typically do), there is no way to obtain authorization information at a
>> later point without having a username/password to login to the LDAP server.
>>  Due to the way JSecurity works, authentication and authorization happen
>> independently of each other, and so when authorization occurs we do not have
>> the username/password that was originally used to authenticate (as we
>> shouldn't).
>>
>> I think this brings to light an option that JSecurity should offer - which
>> is to allow authorization information to be obtained at login and cached for
>> the duration of a user's session.  This is the way many security frameworks
>> operate, and usually we tout the fact that JSecurity doesn't work this way
>> as an advantage (i.e. dynamic security updates, flexible caching, etc.)
>>
>> However - in this case it's a disadvantage because login is the only time
>> when we have the information we need to obtain the authorization information
>> (since the authentication info is needed to obtain it).  I think there will
>> be other scenarios where this is the case (external authorization systems,
>> SSO systems, etc.) so I do think JSecurity should offer this mechanism as an
>> option.  I'll open a JIRA issue to address this for the 1.0 release.
>>
>> As far as a short-term workaround, you could either:
>> 1) configure the system username and password for now (as I think you've
>> already done)
>> or
>> 2) extend the Active Directory realm, and override
>> queryForAuthenticationInfo to grab the AuthorizationInfo (similar to how
>> queryForAuthorizationInfo does) at login.  You could then cache the
>> AuthorizationInfo in the subject's session and override
>> queryForAuthorizationInfo to return the session-cached authorization
>> information.  This is similar to how JSecurity would probably do this in the
>> future, but obviously you'd have to manually implement it.
>>
>> Please let me know if you have any further questions or ideas!
>>
>> Jeremy
>>
>>
>> On Mar 25, 2009, at 12:24 PM, Maciej Pigulski wrote:
>>
>>
>>> Unfortunately this is still an issue to me.
>>>
>>>
>>> Jeremy or Tim, do you know if you'd be able to help out Maciej?  I don't
>>> have any experience with the LDAP/AD stuff you guys wrote.  Maciej,  have
>>> you been able to work through this issue?
>>>
>>> On Thu, Mar 19, 2009 at 9:46 AM, Maciej Pigulski
>>> <[email protected]>wrote:
>>>
>>>
>>>> Hello,
>>>>
>>>> I have a following problem with jSecurity, ActiveDirectoryRealm and
>>>> Groups
>>>> mappings.
>>>>
>>>> I have an AD setup on one server (WHEEL) with a simple user called
>>>> user1.
>>>> This user is in ldap group called "login" (CN=login,OU=Groups,DC=WHEEL).
>>>>
>>>> Next I'm trying to login and retrieve roles for this user. Login works
>>>> fine
>>>> but when it comes to user roles I  have to additionally provide username
>>>> and
>>>> password in activeDirectoryRealm.setSystemUsername/Password. I've found
>>>> in
>>>> the API that it is a pretty normal behaviour (but IMHO very
>>>> inconvenient)
>>>> (
>>>>
>>>> http://www.jsecurity.org/releases/0.9.0-beta2/docs/api/org/jsecurity/realm/ldap/DefaultLdapContextFactory.html#setSystemUsername(java.lang.String)<http://www.jsecurity.org/releases/0.9.0-beta2/docs/api/org/jsecurity/realm/ldap/DefaultLdapContextFactory.html#setSystemUsername%28java.lang.String%29>
>>>> <
>>>> http://www.jsecurity.org/releases/0.9.0-beta2/docs/api/org/jsecurity/realm/ldap/DefaultLdapContextFactory.html#setSystemUsername%28java.lang.String%29
>>>> >
>>>> :
>>>> <cite>
>>>> systemUsername - the username to use when logging into the LDAP server
>>>> for
>>>> authorization.
>>>> </cite>
>>>>
>>>> Is there any tricky way to bypass this? Setting same credentials on two
>>>> objects to authorize and authenticate one user seems to be quite wrong.
>>>>
>>>> I've managed to obtain this by creating a super user (with enterprise
>>>> administrator rights) that has hardcoded username and password in
>>>> application (systemUsername and systemPassword) and this works for
>>>> authenticating other users but I'd like to avoid using such powerfull
>>>> user
>>>> just for groups fetching as it seems to be an huge overkill for me.
>>>>
>>>> Here is a class I'm using to test with AD:
>>>>
>>>> import java.util.HashMap;
>>>> import java.util.Map;
>>>>
>>>> import org.jsecurity.authc.UsernamePasswordToken;
>>>> import org.jsecurity.mgt.DefaultSecurityManager;
>>>> import org.jsecurity.realm.activedirectory.ActiveDirectoryRealm;
>>>> import org.jsecurity.subject.Subject;
>>>>
>>>> public class TestJSec {
>>>>
>>>>      private DefaultSecurityManager securityManager = new
>>>> DefaultSecurityManager();
>>>>      private ActiveDirectoryRealm activeDirectoryRealm = new
>>>> ActiveDirectoryRealm();
>>>>
>>>>      public TestJSec() {
>>>>              activeDirectoryRealm.setSearchBase("DC=WHEEL");
>>>>              activeDirectoryRealm.setUrl("ldap://ldap-host:389";);
>>>>              activeDirectoryRealm.setSystemUsername("us...@wheel"); //
>>>> if this is
>>>> missing user wont fetch his roles
>>>>              activeDirectoryRealm.setSystemPassword("user1");
>>>> // if this
>>>> is missing user wont fetch his roles
>>>>              Map<String, String> map = new HashMap<String, String>();
>>>>              map.put("CN=login,OU=Groups,DC=WHEEL", "login");
>>>>              activeDirectoryRealm.setGroupRolesMap(map);
>>>>
>>>>              securityManager.setRealm(activeDirectoryRealm);
>>>>      }
>>>>
>>>>      private void testLogin() {
>>>>              UsernamePasswordToken userToken = new
>>>> UsernamePasswordToken("us...@wheel",
>>>> "user1");
>>>>
>>>>              Subject subject = securityManager.login(userToken);
>>>>              if (subject.hasRole("login")) {
>>>>                      System.out.println("User in role");
>>>>              } else {
>>>>                      System.out.println("User has no role");
>>>>              }
>>>>      }
>>>>
>>>>      public static void main(String[] args) {
>>>>              TestJSec tjs = new TestJSec();
>>>>              tjs.testLogin();
>>>>      }
>>>> }
>>>>
>>>>
>>>> For example in jBoss this config works without a super user:
>>>>
>>>>
>>>> <application-policy name="DLG_REGW_POLICY">
>>>>      <authentication>
>>>>              <login-module
>>>> code="org.jboss.security.auth.spi.LdapLoginModule"
>>>> flag="required" >
>>>>                      <module-option
>>>> name="java.naming.provider.url">ldap://ldap-host:389/</module-option>
>>>>                      <module-option
>>>> name="rolesCtxDN">OU=Groups,DC=WHEEL</module-option>
>>>>                      <module-option
>>>> name="matchOnUserDN">false</module-option>
>>>>                      <module-option
>>>> name="uidAttributeID">sAMAccountName</module-option>
>>>>                      <module-option
>>>> name="roleAttributeID">memberOf</module-option>
>>>>                      <module-option
>>>> name="roleAttributeIsDN">true</module-option>
>>>>                      <module-option
>>>> name="roleNameAttributeID">name</module-option>
>>>>                      <module-option
>>>> name="searchTimeLimit">5000</module-option>
>>>>                      <module-option
>>>> name="allowEmptyPasswords">false</module-option>
>>>>                      <module-option
>>>> name="searchScope">SUBTREE_SCOPE</module-option>
>>>>              </login-module>
>>>>      </authentication>
>>>> </application-policy>
>>>>
>>>> --
>>>> View this message in context:
>>>>
>>>> http://n2.nabble.com/Reading-user-roles-from-Active-Directory-tp2503002p2503002.html
>>>> Sent from the JSecurity User mailing list archive at Nabble.com.
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> View this message in context:
>>> http://n2.nabble.com/Reading-user-roles-from-Active-Directory-tp2503002p2533411.html
>>> Sent from the JSecurity User mailing list archive at Nabble.com.
>>>
>>>
>>
>

Reply via email to