Hi Kyle,

Thanks for taking a look. Indeed, I made the assumption that
SimpleCredentialsMatcher is used by default, but as part of my
troubleshooting I explicitly set it. doGetAuthenticationInfo is
invoked for sure, because my logs show it (I also stepped thru with
the debugger):

[WARN] org.tynamo.security.services.SecurityModule.RememberMeManager
(buildRememberMeManager:111) - Symbol 'security.remembermecipherkey'
is not set, using 'tapestry.hmac-passphrase' as the cipher. Beware
that changing the value will invalidate rememberMe cookies
[ERROR] org.apache.tapestry5.modules.AssetsModule.AssetSource
(invoke:237) - Packaging of classpath assets has changed in release
5.4; Assets should no longer be on the main classpath, but should be
moved to 'META-INF/assets/' or a sub-folder. Future releases of
Tapestry may no longer support assets on the main classpath.
[WARN] org.apache.tapestry5.modules.AssetsModule.AssetSource
(invoke:245) - Classpath asset '/org/tynamo/security/img/login-bg.png'
should be moved to folder
'/META-INF/assets/security/org/tynamo/security/img/'.
[DEBUG] com.foo.bar.core.engine.components.dao.UserManagementMockDao
(getUser:444) - userId: donkey
[DEBUG] com.foo.bar.core.engine.components.dao.UserManagementMockDao
(getUserPassword:451) - userId: donkey

As you can see my mock dao is correctly being called and it is
returning the correct password because I saw it in the debugger.

Am I instantiating SimpleAuthenticationInfo correctly? This API is all
new to me (never worked with Shiro) so I'm learning as I go.

Also, here is what my AppModule contribution looks like:

    @Contribute(WebSecurityManager.class)
    public static void addRealms(Configuration<Realm> configuration,
@Inject @FromFactory UserManagementDao dao) {
        Realm realm = new FooBarCoreRealm(dao);
        configuration.add(realm);
    }

Obviously replaced company name with FooBar etc.

Adam

On Tue, Nov 8, 2016 at 7:55 PM, Kalle Korhonen
<kalle.o.korho...@gmail.com> wrote:
> Looks fine at a quick glance. As I recall, an AuthenticatingRealm uses
> SimpleCredentialsMatcher by so it should match plain text passwords. Are
> you sure it's not authenticating, or is doGetAuthenticationInfo invoked at
> all? Do you have any other realms configured? Get the simple, single realm
> use case working first and work from there.
>
> Kalle
>
> On Tue, Nov 8, 2016 at 10:16 AM, Adam X <vbgnm3c...@gmail.com> wrote:
>
>> Howdy !
>>
>> I followed tynamo setup guide
>> (http://www.tynamo.org/tapestry-security+guide/) combined with
>> federated accounts example
>> (https://github.com/tynamo/tynamo-federatedaccounts). I believe I have
>> the setup hooked up correctly as my annotated page with
>> @RequiresRoles("administrator") is not intercepted by tynamo and a
>> login page appears. The problem I'm having is that when I enter valid
>> credentials tynamo is not authenticating. Below is my custom realm.
>> UserManagementDao is just an interface, but the implementation I'm
>> injecting is a simple in-memory hash map impl with a unit test
>> verifyinig it's correctness (in reality we're authenticating against
>> AWS IAM but I'm usinig mock to get things working initially). However,
>> I'm not sure if I'm constructing SimpleAuthenticationInfo correctly.
>> Another thing is that my passwords (for now) are clear text and I'm
>> not sure if by default Tynamo uses clear text comparison of if it
>> hashes the passwords.
>>
>> Any help would be highly appreciated!
>>
>> public class MyCustomRealm extends AuthorizingRealm {
>>
>>     private UserManagementDao dao;
>>
>>
>>     public XappmCoreRealm(UserManagementDao dao) {
>>
>>         super(new MemoryConstrainedCacheManager());
>>         setName("awsiamaccounts");
>>         setAuthenticationTokenClass(UsernamePasswordToken.class);
>>         //setCredentialsMatcher(new
>> HashedCredentialsMatcher(Sha1Hash.ALGORITHM_NAME));
>>
>>         this.dao = dao;
>>     }
>>
>>     @Override
>>     protected AuthorizationInfo
>> doGetAuthorizationInfo(PrincipalCollection principals) {
>>
>>         if(principals == null) throw new
>> AuthorizationException(String.format("null %s! (should not happen)",
>> PrincipalCollection.class.getSimpleName()));
>>         if(principals.isEmpty()) return null;
>>         if(principals.fromRealm(getName()).size() <= 0) return null;
>>
>>         String username = (String)
>> principals.fromRealm(getName()).iterator().next();
>>         if(username == null) return null;
>>
>>         List<XapGroup> groups = dao.getUserGroups(username);
>>         Set<String> roles = new HashSet<>();
>>
>>         for(XapGroup group : groups) {
>>             roles.add(group.getId());
>>         }
>>
>>         return new SimpleAuthorizationInfo(roles);
>>     }
>>
>>     @Override
>>     protected AuthenticationInfo
>> doGetAuthenticationInfo(AuthenticationToken token) throws
>> AuthenticationException {
>>
>>         UsernamePasswordToken upToken = (UsernamePasswordToken) token;
>>         String userName = upToken.getUsername();
>>
>>         if(userName == null) throw new AccountException("Null
>> usernames are not allowed by this realm.");
>>
>>         XapUser user = dao.getUser(userName);
>>         if(user == null) return null;
>>
>> //        if (user.isAccountLocked()) { throw new
>> LockedAccountException("Account [" + username + "] is locked."); }
>> //        if (user.isCredentialsExpired()) {
>> //            String msg = "The credentials for account [" + username
>> + "] are expired";
>> //            throw new ExpiredCredentialsException(msg);
>> //        }
>>
>>         String password = dao.getUserPassword(userName);
>>
>>         return new SimpleAuthenticationInfo(userName, password,
>> getName());
>>     }
>> }
>>
>> Adam
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to