Set the salt and stuff via java, and then retrieve with your shiro.ini info.

Date: Thu, 30 Oct 2014 13:06:13 -0400
Subject: Re: Configuring Shiro Programatically
From: [email protected]
To: [email protected]

What's the proper way to report a bug on this?  There's the ASF Shiro JIRA, but 
it seems that it's not possible to report a bug in JIRA without having the 
correct permissions.

-Robert Middleton
On Thu, Oct 30, 2014 at 11:29 AM, Robert Middleton <[email protected]> 
wrote:
The queries should all be done through the JdbcRealm class, that has the 
standard JDBC queries.

I have figured out the problem though.  It turns out that shiro is ignoring the 
salt when attempting to set the password up.  Since I have two columns, one for 
the hashed password and one for the salt, it's correctly retrieving them but is 
not setting the salt when asking for the password to be checked.  It works fine 
as long as the database column is in the $shiro1 format.
-Robert Middleton
On Wed, Oct 29, 2014 at 6:07 PM, Konrad Zuse <[email protected]> wrote:



This is my code, granted I will say I have not personally tested it, but I 
helped another buddy finish his project so I believe this should work 
completely.

I haven't tested it yet only because I was siill setting up my DB and I am 
finishing up other things now.

I'm not 100% sure about the line "# privateSalt needs to be base64-encoded in 
shiro.ini but not in the Java code" as I got this from another source, but I'm 
not sure why one would be and one wouldn't, so hopefully someone else can 
answer that.

# Hash Service Original values of PasswordServicehashService = 
org.apache.shiro.crypto.hash.DefaultHashServicehashService.hashIterations = 
500,000hashService.hashAlgorithmName = SHA-256hashService.generatePublicSalt = 
true
# privateSalt needs to be base64-encoded in shiro.ini but not in the Java 
code#Salt is randomly generated with the Secure Generator

saltGenerator = 
org.apache.shiro.crypto.SecureRandomNumberGeneratorhashService.privateSalt = 
saltGenerator.nextBytes.toBase64

#PasswordMatcherpasswordMatcher = 
org.apache.shiro.authc.credential.PasswordMatcher
#PasswordServicepasswordService = 
org.apache.shiro.authc.credential.DefaultPasswordServicepasswordService.hashService
 = $hashServicepasswordMatcher.passwordService = $passwordService
#DataSource which is our Databaseds = ds.serverName = ds.port  = 
ds.databaseName = ds.user = ds.password =   jdbcRealm = 
org.apache.shiro.realm.jdbc.JdbcRealm jdbcRealm.permissionsLookupEnabled = true 
jdbcRealm.authenticationQuery = SELECT password FROM Company WHERE username = ? 
jdbcRealm.userRolesQuery = SELECT roles FROM Company WHERE username = ? 
jdbcRealm.permissionsQuery = SELECT permissions FROM Company WHERE role_name = 
? jdbcRealm.credentialsMatcher = $passwordMatcher jdbcRealm.dataSource=$ds
 securityManager.realms = $jdbcRealm


I'm assuming all of your queries and such are done within your SQLiteConfig 
config = new SQLiteConfig(); class?  Is this your own class, or is this one of 
the predefined classes?
From: [email protected]
To: [email protected]
Subject: RE: Configuring Shiro Programatically
Date: Wed, 29 Oct 2014 17:54:38 -0400




Weird...  It looks like there is an issue with the class loader, however why 
does it say "Unable to load class" then "Unabl;e to load clazz....???"  
Something is weird there.

Date: Wed, 29 Oct 2014 17:40:39 -0400
Subject: Re: Configuring Shiro Programatically
From: [email protected]
To: [email protected]

Oh, that makes a bit more sense now.  I've used the PasswordService and 
PasswordManager now, but I'm still unable to authenticate.  I turned up 
debugging some more, and now I get the following output:17:21:55.123 
[SSHThread] TRACE org.apache.shiro.util.ClassUtils - Unable to load clazz named 
[ff72007e587a7be71ffa92b598fef97ec0de1a1354a5e241f60d1806c9cd0351] from class 
loader [sun.misc.Launcher$AppClassLoader@13cb1eb]
17:21:55.123 [SSHThread] TRACE org.apache.shiro.util.ClassUtils - Unable to 
load class named 
[ff72007e587a7be71ffa92b598fef97ec0de1a1354a5e241f60d1806c9cd0351] from the 
thread context ClassLoader.  Trying the current ClassLoader...
17:21:55.124 [SSHThread] TRACE org.apache.shiro.util.ClassUtils - Unable to 
load clazz named 
[ff72007e587a7be71ffa92b598fef97ec0de1a1354a5e241f60d1806c9cd0351] from class 
loader [sun.misc.Launcher$AppClassLoader@13cb1eb]
17:21:55.124 [SSHThread] TRACE org.apache.shiro.util.ClassUtils - Unable to 
load class named 
[ff72007e587a7be71ffa92b598fef97ec0de1a1354a5e241f60d1806c9cd0351] from the 
current ClassLoader.  Trying the system/application ClassLoader...
17:21:55.124 [SSHThread] TRACE org.apache.shiro.util.ClassUtils - Unable to 
load clazz named 
[ff72007e587a7be71ffa92b598fef97ec0de1a1354a5e241f60d1806c9cd0351] from class 
loader [sun.misc.Launcher$AppClassLoader@13cb1eb]
The ff72... value is the hashed password, so shiro is reading from the database 
properly.  However, the log messages indicate that it's trying to load a class 
with that name??  My database should be setup properly, with a table 'users' 
and columns 'password', 'password_salt', and 'username'.  
-Robert Middleton
On Wed, Oct 29, 2014 at 2:35 PM, Konrad Zuse <[email protected]> wrote:



Sorry, ignore my last reply, was in the middle of typing it and was goin g to 
finish it later since I didn't have time and clicked send... sorry all again >(


You should, however, be using "passwordservice" and passwordmanager

I don't have much time now, so I will reply again later with some code I have 
using it.


check out this post though from Lez, who is the creator (at least I believe he 
is one of them, if not the only one).

http://stackoverflow.com/questions/17048153/apache-shiro-using-hashing-credentials-can-not-make-login-successfully

From: [email protected]
To: [email protected]
Subject: RE: Configuring Shiro Programatically
Date: Wed, 29 Oct 2014 14:33:21 -0400




I don't think we used HashedCredentialsMatcher anymore, 

From: [email protected]
Date: Wed, 29 Oct 2014 15:26:12 +0100
Subject: Re: Configuring Shiro Programatically
To: [email protected]

You're probably missing a LifecycleUtils.init(realm);

Log lines come from AuthenticatingRealm most probably because JdbcRealm 
inherits those methods from AuthenticatingRealm. Typically loggers are 
initialized with the class declaring them.

On Wed, Oct 29, 2014 at 3:06 PM, Robert Middleton <[email protected]> 
wrote:
Hi,

I have set up shiro programatically using the following code:

SQLiteConfig config = new SQLiteConfig();
config.enforceForeignKeys( true );
HashedCredentialsMatcher cm = new HashedCredentialsMatcher( "SHA-256" );
cm.setHashIterations( 500000 );
JdbcRealm realm = new JdbcRealm();
org.sqlite.SQLiteDataSource ds = new org.sqlite.SQLiteDataSource( config );
ds.setUrl( "jdbc:sqlite:light.db" );
realm.setDataSource( ds );
realm.setCredentialsMatcher( cm );
realm.setSaltStyle( SaltStyle.COLUMN );
SecurityManager ss = new DefaultSecurityManager( realm );
SecurityUtils.setSecurityManager( ss );

However, when I try to authenticate a user, I can't log in.  This worked find 
before when I used shiro.ini with no  encryption on the passwords.  The 
following debug information is printed out:

18:18:28.835 [SSHThread] DEBUG org.apache.shiro.realm.AuthenticatingRealm - 
Looked up AuthenticationInfo [robert] from doGetAuthenticationInfo
18:18:28.836 [SSHThread] DEBUG org.apache.shiro.realm.AuthenticatingRealm - 
AuthenticationInfo caching is disabled for info [robert]. Submitted token: 
[org.apache.shiro.authc.UsernamePasswordToken - robert, rememberMe=false].
18:18:29.275 [SSHThread] DEBUG 
org.apache.shiro.authc.credential.SimpleCredentialsMatcher - Performing 
credentials equality check for tokenCredentials of type 
[org.apache.shiro.crypto.hash.SimpleHash and accountCredentials of type 
[org.apache.shiro.crypto.hash.SimpleHash]
18:18:29.276 [SSHThread] DEBUG 
org.apache.shiro.authc.credential.SimpleCredentialsMatcher - Both credentials 
arguments can be easily converted to byte arrays. Performing array equals 
comparison
18:18:29.277 [SSHThread] ERROR com.synexxus.gateway.connectors.SSHConnector - 
org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for 
token [org.apache.shiro.authc.UsernamePasswordToken - robert, rememberMe=false] 
did not match the expected credentials.

Since I setup the realm for the SecurityManager to be a JdbcRealm, I would 
expect that the log lines that come from 
org.apache.shiro.realm.AuthenticatingRealm would in fact come from 
org.apache.shiro.realm.jdbc.JdbcRealm.  Why isn't this the case?





-- 
Alessio Stalla | Software Architect
M: +39 340 7824743 | T: +39 010 566441 | F: +39 010 8900455
[email protected] | www.manydesigns.com

MANYDESIGNS s.r.l.
Via G. D'Annunzio, 2/51 | 16121 Genova (GE) | Italy



                                          

Reply via email to