2017-08-30 13 views
-1

だから、perlのダンサーを使用していたいずれかがログイン時にユーザーを認証することを知っているあなたはPerlのDancer2認証パスワード管理

authenticate_userを呼び出すことができます
authenticate_user(
    params->{username}, params->{password} 
); 

これは認証::拡張プラグインの一部です。

私には、パスワードをプレーンテキストで保存することを奨励しているようです。確かにパスワードを最初にハッシュすることができますし、保存されたパスワードが同じハッシュであることを確認してください。しかし、これはもっとうまくいくと思われます。私は使用すべきではないsha1を使用してこれを動作させるだけです。私はBcryptを使用したいが、パスフレーズは単純に一致しない。おそらく奇妙な文字は私には分からない。

事は、私はすでにも、それらを検証するためにauthenticate_userに依存することなく、ユーザ名とパスワードを検証することができダンサーパスフレーズのプラグインを使用しています。しかし、ダンサーのフレームワークでは、あなたがまだパスワードを渡す必要がありますauthenticate_userを呼び出す必要がログインユーザーを考慮する。

私は完全に固執しています。どのように他の人がdancer2で適切なパスワード管理を使用しているのか不思議です。 Dancer2::Plugin::Auth::Extensibleのドキュメントで

+1

[Dancer2 :: Plugin :: Auth :: Extensible](https://metacpan.org/pod/Dancer2::Plugin::Auth::Extensible)のドキュメントをスキミングしたように見えません。 –

+0

私は最後の手段として私が見つけることができるすべてのドキュメントを読んだ後、このような場所に投稿します。あなたが典型的なrtfmタイプの応答を与えるには、それ以外の理由で少なくとも "それはあなたがスキミングしたように見えません"という質問を少なくともバックアップしてください。 – jeffez

+1

パスワードはプレーンテキストで保存する必要があるという考え方はどこですか?表示されたコードは、ユーザーから提供された資格情報を受け取ります。彼らは明らかに平文ですが、どこにも保存されておらず、ちょうど電線で受信されています。 'authenticate_user'はハッシュの世話をして、フードの下で比較します。どのようにそれは完全に透明です。それは、さまざまなプロバイダの束が付属していますが、あなたは何か他のものが必要な場合は、あなた自身のロールバックすることもできます。 – simbabque

答えて

1

authenticate_user()のための説明が書かれています:

通常あなたが認証するユーザーとコードの契約を扱う組み込みのログインをさせたいと思うでしょうが、場合には、あなたがそれを自分で行う必要がありますこのキーワードはユーザー名とパスワードを受け入れます...

これは、あなたが特に巧妙なことをしない限り、この機能を全く呼び出すべきではないことを強く意味します。

私はこのモジュールを自分で使用していませんが、ハッシュと暗号化のすべてはauthentication providersのいずれかで処理する必要があります。使用しているケースをカバーしていない場合はwrite one yourselfです。

ダンサーアプリに安全なパスワードを保存する必要がある場合はいつでも、Dancer2::Plugin::Passphraseに届きます。 Auth :: Extensibleスタイルの認証プロバイダを作成することを検討する必要があるのだろうかと思います。

+0

暗号化の問題を、認証プロバイダが処理する必要があることを修正します。 Auth :: Extensible :: Provider :: Databaseのドキュメントでは、Crypt :: SaltedHashが使用されています。ただし、authenticate_userはdb内のプレーンテキストのパスワードと一致するだけです。 Dancer2 :: Plugin :: Passphraseを使用して自分自身で認証を終わらせましたが、私がしようとしていることは、そのレベルの作業を必要とするものではないと確信しています。 – jeffez

+0

@jeffez:なぜ、あなたは 'authenticate_user()'を呼び出していますか?ほとんどの用途では、それは不要です。 –

+0

私は、セッション変数のログをユーザに追加する前に、authenticate_user()がユーザ名とパスワードの確認に使用されることを理解しています。これは私が必要としていただけですが、パスワードは、デフォルトでAuth :: Extensible :: Provider :: Database docsに行くことは想定されていないプレーンテキストでのみ一致します。私は自分のユーザー名とパスワードのマッチングを終わらせましたが、それは「設定よりも規則」に反するものです。 – jeffez

1

まず、「あなたはほとんど確実にauthenticate_user()を使用する必要はありません」とコメントします。プラグインはすべてあなたのためにそれを処理することができます。

ただし、「ハッシュしない」というのは間違っています。ここでそれはどのように動作するのですか? authenticate_userキーワードはすべての認証領域をループし、それぞれ の場合、そのプロバイダのauthenticate_user()メソッドに、ユーザ名とパスワード を受け入れるかどうかを確認するように要求します。プロバイダDatabaseは、 レコードをDBから取り出し、$self->match_password()Provider roleからのもの)を使用して検証します。そのコードチェック から記憶されたパスワードがデータベース{scheme}で始まり、そうであれば、(それだけでワイヤ上に来ていたよう プレーンテキストで、)そのユーザが入力したパスワードを検証する Crypt::SaltedHash->validateを使用する場合、格納されたと一致する、 をハッシュデータベース内に保存されたパスワードがハッシュされた場合に入力したパスワードはハッシュと一致する場合

if ($correct =~ /^{.+}/) { 

    # Looks like a crypted password starting with the scheme, so try to 
    # validate it with Crypt::SaltedHash: 
    return Crypt::SaltedHash->validate($correct, $given); 
} 

ので、はい、それはそれは 一致します。passsword(コード内の$correctは、以下の保存されたパスワードです)。保存されたハッシュされたパスワードがどのように見えるかの例

は、ここに同梱generate-crypted-passwordユーティリティの 出力です:

[[email protected]:~]$ generate-crypted-password 
Enter plain-text password ?> hunter2 
Result: {SSHA}z9llSLkkAXENw8FerEchzRxABeuJ6OPs 

はalgorhythmsが、それによって をサポートされているかの詳細についてはCrypt::SaltedHash docoを参照してください、と(RFC-3112と が異なるデジタルアルゴリズムを使用することによって拡張されています)。

authenticate_userのコードはまさに のフードの下にあるコードであることに注意してください。ただプラグインをさせる例について

があなたのために仕事をし、考えてみます。

get '/secret' => require_login sub { 
    my $user = logged_in_user(); 
    return "Hi, $user->{username}, let me tell you a secret"; 
}; 

...それはそれです。 require_loginは、プラグインがユーザーがログインしている場合は をチェックし、そうでない場合は、ログインページ にリダイレクトしてログインすることを意味します。authenticate_userに電話する必要はありません。 は設定する必要はありませんセッション変数など。 logged_in_user() は、ログインしたユーザーに関する情報のハッシュリファレンスを返します( ルートコードにrequire_loginがあるため、この ポイントに1があることが保証されているため、確認する必要はありません)。

の代わりに適切な役割があることを確認する必要がある場合は、代わりにrequire_roleを参照してください。

関連する問題