8

したがって、基本的には、Googleの2要素認証の実装に似たものを実現したいと考えています。私のログインフォームは、2ステップのフォームウィザードで構成されています。

  1. ステップ1(ユーザー名とパスワードの確認)
  2. ステップ2(セキュリティトークンを認証する)

使用シナリオは次のようになります。

  1. ユーザーは自分のアカウントに関連付けられたセキュリティトークンを持っています:ユーザーがステップ1とステップ2に合格した場合、ユーザーをログインさせます
  2. ユーザーはセキュリティトークンを持っていません:ステップ1を通過した直後にのみユーザーをログインさせます

ログインビューとして使用するために、djangoのフォームウィザードをサブクラス化しています。ステップ2では、デフォルトでDjangoFormWizardに以前に送信されたフォームのフィールド値が非表示フィールドとして含まれます。ただし、ご存知のように、パスワードはステップ1で入力するため、セキュリティ上の理由から、ステップ2には含めたくありません。

私の最初の考えは、ユーザーがステップ1に合格したかどうかを示すためにセッションを使用することでした。したがって、ステップ1のフィールド値を含める必要はありません。しかし、ここで何かを見落としている可能性があります。これに対するより安全な解決策は何ですか?

また、FormWizardでのセキュリティハッシュの使用についてもよくわかりません。誰かが説明できますか?

どうもありがとう。

4

5 に答える 5

5

Duo Securityの duo_webプロジェクトには、これを行う1つの方法を示すオープンソースのDjangoデモがあります(私はDuo開発者です)。

デモのセットアップには、組み込みの@login_requiredと同様の@duo_auth_requriedデコレータがあり、ユーザーが2次認証に合格したことを示すセッションCookieをチェックします。@login_requiredデコレータはローカル認証を検証し、@ duo_auth_requiredデコレータは第2要素認証を検証し、どちらも存在しない場合、ユーザーは関連するフォームにリダイレクトされます。

説明との違いは、単一のフォームで両方を認証したり、フォーム間でクレデンシャルを渡したりするのではなく、別々に行うことです。両方のデコレータでビューを保護するだけで、2番目の要素の認証が試行される前にDjangoを使用してローカル認証をアサートできます。

于 2011-04-23T00:00:36.277 に答える
5

最後の回答から1年以上後:

Django-two-factor-authはdjango-otpに基づいて構築されており、Google Authenticator、Twilio SMS、バックアップコードのサポートをすぐに追加できます。非常に印象的。

于 2014-07-17T09:01:17.157 に答える
3

FormWizardセキュリティトークンの要点を正確に把握しているわけではありませんが、を拡張するのをやめて、2つの別々のビューとして実装するだけで、より簡単で高速に見えるでしょう。の要点は、FormWizardいくつかのフォームを1つに分割して集約することであり、特定のユースケースはそれに反します。それ以外の機能を実行するためにハッキングするだけです。

セキュリティハッシュについては、正常に完了したステップからすべてのフォームデータのハッシュを計算します。これは、フォームデータがステップ間で変更/改ざんされていないこと、および他の方法でステップがバイパスされていないことを確認するためのセキュリティ対策にすぎません。

于 2011-02-24T09:25:07.107 に答える
2

django-otpプロジェクトは、プラグイン可能な2要素認証をDjangoに追加します。ビューからフォーム、低レベルAPIまで、さまざまなレベルで統合できます。

于 2013-03-11T01:19:41.877 に答える
0

LinOTPやprivacyideaなどの既存の多要素認証バックエンドを使用できます。django-pluginの記事を作成しました。

于 2014-07-18T19:11:13.323 に答える