J'ai généré un hachage SHA-1 en utilisant Dancer2 :: Plugin :: passphrase avec le code suivant:Dancer2 Auth :: Extensible Ne pas accepter Hashed Mot de passe
get '/generate' => {
my $phrase = passphrase('my_password')->generate({ algorithm => 'SHA-1'});
return $phrase->rfc2307();
};
Le résultat ressemble à ceci:
{SSHA}+2Dro1/ntPchT93mgvYMKGjdzy+XKXK1agsG3//hKuLNrQAK
et c'est ce que je stocke dans ma base de données PostgreSQL.
J'utilise Dancer2 :: Plugin :: Auth :: Extensible comme ma solution de connexion, mais je n'ai pas encore le faire fonctionner avec des mots de passe cryptés. J'ai mis un compte de test dans ma base de données où nom d'utilisateur = 'test' et mot de passe = 'test', et cela fonctionne bien. Mais le nom d'utilisateur = 'test2' et le mot de passe = '{SSHA} + 2Dro1/ntPchT93mgvYMKGjdzy + XKXK1agsG3 // hKuLNrQAK' ne fonctionnent pas. La page de connexion échoue et recharge automatiquement.
Je me suis retourné sur DBI_TRACE et ne pas vu beaucoup de différence entre les deux, sauf que le compte avec le mot de passe de texte brut retourne ceci:
[glm::App:3515] debug @2016-05-10 21:02:23> users accepted user test in /usr/local/share/perl/5.20.2/Dancer2/Core/Route.pm l. 137
et le compte des déclarations de mot de passe crypté ceci:
[glm::App:3523] core @2016-05-10 21:04:21> looking for get /login in /usr/local/share/perl/5.20.2/Dancer2/Core/App.pm l. 1210
[glm::App:3523] core @2016-05-10 21:04:21> Entering hook core.app.before_request in (eval 62) l. 1
[glm::App:3523] core @2016-05-10 21:04:21> Entering hook core.app.after_request in (eval 62) l. 1
127.0.0.1 - - [10/May/2016:21:04:21 +0100] "POST /login?return_url=%2F HTTP/1.1" 401 383 "http://localhost:5000/login?return_url=%2F" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0"
Je suis sûr que je manque quelque chose, mais the CPAN page ne détaille pas comment gérer les mots de passe cryptés. Il dit simplement que ce sera facile. Je suppose que je lis cela comme "les mots de passe cryptés seront manipulés automagiquement." Qu'est-ce que je rate?
Config
Ceci est la partie pertinente de ma config
plugins:
Auth::Extensible:
realms:
users:
provider: 'Database'
Database:
dsn: 'dbi:Pg:service=test'
App.pm
Voici ce que je fais dans le App.pm. Vous pouvez voir que j'essaie juste d'exiger une connexion pour la page d'accueil. Peut-être que j'ai besoin d'un code '/ login'?
package glm::App;
use Dancer2;
use Dancer2::Plugin::Database;
use Dancer2::Plugin::Auth::Extensible;
use Dancer2::Plugin::Passphrase;
use Template;
our $VERSION = '0.1';
get '/' => require_login sub {
my $sth = database->prepare('SELECT name FROM product', { RaiseError => 1 });
$sth->execute();
template 'create_list', {
'products' => $sth->fetchall_hashref('name'),
};
};
get '/generate'=> sub {
my $phrase = passphrase('my_password')->generate({ algorithm => 'SHA-1' });
return $phrase->rfc2307(); # right now I just manually copy and paste this into the database
};
Ma base de données suit le suggested schema pour les utilisateurs, les mots de passe et les rôles.
Peut-être le seul autre peu d'informations pertinentes que je peux penser est que si j'utilise un système de cryptage non reconnu par Digest, je reçois une erreur de Digest.pm. Cela semble indiquer qu'il reconnaît le mot de passe haché et essaie de le déchiffrer, mais pour une raison quelconque, cela ne fonctionne tout simplement pas. Ou ça marche et redirige vers la page d'accueil ... Mais pourquoi ne fait-il pas ça avec 'test, test'?
Pouvez-vous envoyer votre code s'il vous plaît? Si le mot de passe ressemble à un mot de passe crypté, alors DPAE utilise '' 'Crypt :: SaltedHash''' pour le vérifier, il devrait donc fonctionner correctement. Le code pour cela est ici: https://metacpan.org/source/HORNBURG/Dancer2-Plugin-Auth-Extensible-0.502/lib/Dancer2/Plugin/Auth/Extensible/Provider/Base.pm#L88 –
Merci beaucoup pour la réponse. J'ai ajouté tout ce que je pense être pertinent. Faites-moi savoir s'il y a quelque chose d'autre qui pourrait aider. – tmoore82