2017-05-15 4 views
0

私はタスクを開発しています(何もプロフェッショナルではなく、学習用です)、そこにはASP.NETでWebアプリケーションが、WPFで管理アプリケーションがあるアプリケーションがあります。これらのプロジェクトは、どちらも同じlocaldbデータベースに接続します。タスクは、非管理者だけがWebアプリケーションに登録できるようにすることですが、WPFアプリケーションの管理者も認証が必要です(また、Usersテーブルにもいくつかの依存関係があります)。ハッシュパスワードを使用して既存のLocalDBエントリを更新しますか?

ので、データベースは次のようである:

UsrName UsrPwd IsAdmin 
admin NULL  True 
nonadmin kdjfgbjk False 

私の問題があり、UsrPwdのみは、BCセキュリティ上の理由のユーザー向けにパスワードをハッシュ化され含まれていること。今。非管理者だけがWebアプリケーションに登録するので、ハッシングのために管理者にパスワードを追加する方法がわかりません - SQL照会で管理者を追加しました(そのためUsrPwdNULLです)。

私の質問は次のとおりです。管理者ユーザーのパスワードを更新するにはどうすればよいですか(システム管理者が最初のパスワードを入力したと思います)。ただし、ハッシュされたパスワードのみがデータベース?

ユーザーを登録してIsAdminTrueに変更してSQLを使って問題を解決しようと考えましたが、管理者ユーザー名にいくつかの外部キーの依存関係があるため、データベース)。

管理者ユーザーにパスワードを追加する方法はありますか?私は、ここのキーワードはある種のコード初のマイグレーション(多分?)かもしれないが、私はそれをどうやって行うのか、それが行く方法であれば、とは思っていない。

ありがとうございました!

EDIT

私は本当にアイデンティティもOWINまたはそのような事を使用していないよ、私はすべてがある:

SoftwareUserはデータベースに基づいたエンティティを生成さ
using (SHA512CryptoServiceProvider provider = new SHA512CryptoServiceProvider()) 
{ 
    passwordBytes = provider.ComputeHash(Encoding.UTF8.GetBytes(user.UserPassword)); 
} 

_entities.SoftwareUser.Add(new SoftwareUser 
{ 
    UsrName = user.UserName, 
    UsrPwd = passwordBytes, 
    IsAdmin = false, 
}); 

+3

ASP.NETメンバーシップまたはアイデンティティを使用していますか?パスワードをハッシュしてメンバーシップを元に戻して再作成する方法のリンクはこちら http://stackoverflow.com/questions/1137368/what-is-default-hash-algorithm-that-asp-net-membership-uses – WithMetta

+0

ここに投稿がありますIDの仕組みを説明する @stackoverflow.com/questions/20621950/asp-net-identity-default-password-hasher-how-does-it-work-and-is-it-secure – WithMetta

+0

@WithMetta私はドン私はどちらかを使っていると思いますが、パスワードを手動でハッシュしています(ポストをコードで更新しました)。 –

答えて

0

Webアプリケーションの起動時に実行される場所です。

Func<string, byte[]> getPwHash = (pwStr) => { 
    using (SHA512CryptoServiceProvider provider = new SHA512CryptoServiceProvider()) 
    { 
     return provider.ComputeHash(Encoding.UTF8.GetBytes(pwStr)); 
    }    
}; 



var nullpwUsers = _entities.SoftwareUser.Where(user => user.UsrPwd == null); 
foreach(var user in nullpwUsers) 
{ 
    user.UserPwd = getPwHash("DefaultPassword"); 
} 
_entities.SaveChanges(); 
+0

クール!私の 'SoftwareEntities:DbContext'は' .Where'関数を持っていないようです。 –

+0

'DbSet に 'Where'と拡張メソッド...の定義が含まれていないため、エラーが表示されます。 –

+1

ああスクラップ、私はLinqのインポートが不足していた。ありがとうございました! –

関連する問題