2016-10-16 5 views
1

私はnonceを生成して、それを次々と保護するためのウィザードのステップを検証します。NodeJSで生成されたnonceを使用し、データベース呼び出しなしで検証する方法は?

ノンスをnodejに作成し、それをデータベースに保存して一度使用できることを確認する方法を知っています。

しかし、上記のようにナンスを生成して検証するアイデアがあるかどうかは、一度しか使用できないようにして、可能な場合はデータベースに保存せずに期限(有効期限) 1つのウィザードステップでクライアントに返すだけで、次のステップでそれを検証できます。

私はノンスを生成し、正規化して、それが使用されていない特定の時間後にmongodbが削除するように、有効期限のある時間でmongodbに保存します。

var crypto = require('crypto'); 

crypto.randomBytes(32, function (err, bytes) { 
    if (err) { 
     next(err); 
    } else { 
     next(null, normalize(bytes)); 
    } 
}); 

これよりナンスおよびデータベース呼び出しなしで1時間の使用状況と有効期限の世話をする可能性を発生させる何か良い/最適化された方法ならばお勧めしてください。

答えて

2

nonceを保存して検証するデータベースを作成することをお勧めします。タイムアウトを制限するには、有効期限付きのmongodbを使用するか、タイムスタンプを生成して、hmac(タイムスタンプはnonce &秘密鍵)を生成します。次にnonceタイムスタンプ& hmacをクライアントに送信します。この方法でタイムスタンプを保護することもできます。データベースがmongodbとして文書の有効期限をサポートしていない場合は、特定の時間でnonceを制限できます。それがうまくいくと思います。

0

ノンスを保存して取得して時刻を確認するために、サーバー上のハッシュマップのようなものを使用して、データベース呼び出しなしでノンスが期限切れになる可能性があります。セッションIDまたは静的なユーザーIDがあれば、それが役に立ちます。しかし、MongoDBなどのテスト済みのソリューションと比較して、ノンスを生成、保持、フェッチ、および維持するというこの考え方は難しいようです。サービスのための複数のサーバの場合に起こるもう一つのしわは、セッションの開始が終わるためにトラフィックの一貫性を維持する必要があります。 nonces上の真の単一のソースのためにデータベースを使用することはそれを修正する。

ノンスをノードサーバーに保存する理由がスピード/ラグの場合は、追加のテストとコードの価値があります。その場合、高速検索を維持するために、期限切れのタイムアウトを定期的にスキャンする必要があります。

関連する問題