2017-12-04 8 views
0

データベース内のすべてのユーザーのパスワードをリセットする可能性を探しています。とにかくそれは可能ですか?私が今までに見つけたのは、ユーザー自身のパスワードリセットを有効にすることでしたが、それは必要ではありません。ASP.NET Core 2すべてのユーザーのパスワードを管理者としてリセット

古いユーザーに強制的にアプリケーションのパスワードを再作成する必要があります。多分もっと良い解決策がありますか?

+0

"パスワードをリセットする"とはどういう意味ですか?何十年ものセキュリティ研究とベストプラクティスを無視し、_all_ユーザーのパスワードを「Welcome123」にリセットして、それらにメールを送りたいですか? – CodeCaster

答えて

3

グローバルパスワードのリセットを行う必要がある場合、何をやるべきことは、ランダムな暗号的に安全なパスワードを生成する関数を作成して、単にそれらのランダムなもの(に各ユーザーのパスワードを変更しています1つではなく、各ユーザーのパスワードを生成します)。これは基本的にグローバルロックアウトを引き起こします。なぜなら、ユーザーはこのパスワードを知らないのでログインできないからです。

その後、パスワードがリセットされたことを示す電子メールを送信して、ユーザーをパスワードリセットページに誘導する必要があります。彼らは基本的にパスワードを忘れたかのように振る舞い、電子メールを送信したり、送信された電子メールのトークンでリンクをクリックしたり、新しいパスワードを設定したりする通常の処理を行います。

また、サインインエラーメッセージを一時的に更新して、すべてのユーザーがパスワードをリセットする必要があることを示す必要があるため、電子メールが届かないと、パスワードが機能しない理由と、それ。

+0

ありがとう!私はこの解決策で終了し、データベースを更新しました。 – DarthIwan

0

パスワードをすべてのユーザーに固有のものにリセットしようとしている場合は、asnetUsersテーブルをハッシュされたパスワードと新しいパスワードのパスワードsaltで更新する必要があります。

の経験から、これを行う最も簡単な方法は、その変更されたユーザーからPasswordHashPasswordSaltをつかむ、特定のユーザーのためのアプリを使用して、パスワードの変更で、その後、それを他のすべてのユーザーにSQLを実行UPDATE組み合わせ。

厳密には安全ではありませんが、それは仕事をします。

多かれ少なかれ:

-- Update User using App, and get the ID 
DECLARE @Id INT = XX -- Your app userid here 
DECLARE @PasswordHash NVARCHAR(MAX), @PasswordSalt NVARCHAR(MAX) 

-- get the password hash and salt for the changed user 
SELECT @PasswordHash = PasswordHash, @PasswordSalt = PasswordSalt 
FROM aspnetUsers 
WHERE Id = @Id 

-- Update the other users with the same password and salt 
UPDATE aspnetUsers SET 
    PasswordHash = @PasswordHash, 
    PasswordSalt = @PasswordSalt 
WHERE 
    Id IN (---whatever you need to filter by) 
+0

Cool、SQLソリューションをありがとう! – DarthIwan

+0

問題ありません。私は、受け入れられたソリューションがはるかに安全なオプションであることを認識しています。これはテストと開発のデータベースで使用する、すばやく汚れたバージョンです。それは動作し、それは迅速かつ汚れています。人々はそれを生産環境に適用する前にそれを認識する必要があります。 – Junto

関連する問題