2015-10-20 4 views
14

現在、私たちのウェブアプリケーションのユーザーは、パスワードのハッシュ/塩とともにデータベースに保存されています。ハッシュは、ユーザーの作成時に計算され、パスワードが設定され、データベースのユーザーテーブルに格納されます。Active Directoryで使用されるパスワードハッシュを計算できますか?

ユーザーアカウントを作成してからしばらくして、ドメインにWindowsアカウントを作成し、ユーザーがログに記録するパスワードと同じになるようにドメインユーザーのパスワードを設定したい場合がありますウェブアプリにプレーンテキストのパスワードは保存しないので、作成時にADに送る方法はありません。

私はこの問題を回避することを考えていましたが、ユーザーが最初にパスワードを設定した後、ADを作成したときにADでレコードを設定したときにADが使用するすべてのパスワードハッシュを計算することです。

  1. .Netを使用して、どのようにハッシュを作成しますか(MD4、MD5、およびDESと思う)?
  2. UserPrincpal.SetPasswordでパスワードの作成をバイパスし、ADによって保存されたハッシュを直接設定するために他の呼び出しを行うことはできますか?

MSにはADからAzureユーザーにパスワードを同期させるツールがあるので、これを行う方法があるようです。 DBのパスワードと同期ADのパスワードを維持しようと

+0

興味深い質問ですが、これはWindowsと同じ塩を使用している場合にのみ機能します。セキュリティの観点からは、両方のシステムで同じパスワードを使用することをお勧めしますか?私はあなたが探しているものが解決策のシングルサインだと言うでしょう – Marged

+0

問題は、私が知る限り、サインオンの「シングル」ポイントでない限り、シングルサインオンでWindowsがうまく動かないということです。どういうわけかMSにはパスワードを同期させるツールがあるので、可能でなければならないと思います。 – bpeikes

+0

Webアプリケーションの実行場所に応じて、さまざまな手法(SAML、Kerberos、証明書)でSSOを使用できます。しかし、同期アプローチを実装しようとし続け、セキュリティの影響を忘れないようにしてください。 – Marged

答えて

5

は、二つの理由のために悪い考えです:

  • それはメンテナンスのセキュリティ上の弱点(コメントはすでに塩を言及することによって、これを指摘している)
  • です問題。 Windows PCによって開始されたパスワード変更により、DBパスワードは変更されません。代わりにウィンドウを作成する

は、同じパスワードでアカウント、 AD認証とWindowsフォーム認証の両方を使用するには、Webアプリケーションの認証を変更します。そうすれば、彼らのAD資格(もしあれば)はユーザ名/パスワードのプロンプトに取って代わるでしょう。

+0

はい。 Opは、ADアカウントが作成されると、データベースにフラグを設定できます。次に、このフラグを使用して、データベースに対して認証するかADに対して認証するかを決定します。 AD(*責任あるかつ安全に使用されている*)に対して簡単に認証する方法の1つは、[PrincipalContext.ValidateCredentialsメソッド](https://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.principalcontext)です。 [AccountManagement](https://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement(v = vs.110).aspx)クラスのvalidatecredentials(v = vs.110).aspx)を参照してください。 +1の答えは:) – Abhitalks

0

a)暗号化されたパスワードでクリアテキストを返すことができます。b)弱いハッシュは、DBが内外の攻撃者によって侵害された場合に悪い考えです。

別のアプローチを考えてみることができます。 *長い、ランダムで不明なパスワードでユーザーのADアカウントを作成します。アカウントに「ADPasswordLastSet = null」タイムスタンプを挿入します。 *次にユーザーがWebアプリケーションにログインすると、認証後にパスワードがクリアされているため、ADユーザーのパスワードを同じに設定します。 ADPasswordLastSetフラグを更新することを忘れないでください。

したがって、パスワードを同期的に設定できる場合は、どこにでもパスワードを書き込む必要はありません。

覚えておいていただきたいこと:パスワードの複雑さのポリシー - ユーザーが対話するUIに存在するポリシーがより厳しいポリシーを持つようにしたい。

関連する問題