私が修正しているアプリケーションにはWebサービスがあり、そのWebメソッド上のWebメソッドの1つは、アクティブディレクトリに対してユーザーを認証するために使用されます。だから、のauthenticateUserウェブメソッドによって呼び出され、現在のコードは次のようになります。Active Directoryを認証するWebサービスのための安全なパスワードソリューションですか?
string domainAndUsername = aDomain + @"\\" + username;
string ldsPath = buildLdsPath(searchBase);
DirectoryEntry entry = new DirectoryEntry(ldsPath, domainAndUsername,
password);
try
{
//Bind to the native AdsObject to force authentication.
object obj = entry.NativeObject;
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(sAMAccountName=" + username + ")";
search.PropertiesToLoad.Add("cn");
SearchResult result = search.FindOne();
// more code to validate the result, etc...
}
私はこのコードを見始めたとき、私を心配まず最初に、ウェブメソッドの引数は次のようになります:
[WebMethod]
public ResultObj AddRole(string roleToAdd, string username, string password)
{
// code that calls above Authentication fragment...
}
だから、現在のWebサービスは、要求がservice.asmxページに行われているXML、などのネットワークを介してクリアなに送られたパスワード文字列、おそらくを期待しています。
誰もこのタイプの問題に対処していますか?プレーンテキストのパスワードを渡すことを避けるために使用できる別のActive Directory認証メカニズムがありますか?私が自分自身で思いつくことができる最良の選択肢は、暗号化されたパスワードを使ってWebMethodを呼び出し、反対側のコードでそれを解読することです。しかし、私はもっと良い解決策を望んでいます。たとえば、パスワードの代わりに一方向ハッシュを使ってDirectoryEntryを検索する方法はありますか?
編集:
追加詳細:ここまで私は、これは私たちの会社の内部にあるツールであり、それはやり過ぎのように思えるようSSL考えられ、おそらく問題にしていない(これ会社のイントラネット上で実行され、外部からは表示されません)。私がプレーンテキストのパスワードを送信することの安全性についても心配している唯一の理由は、最近、企業のイントラネット上に存在するマルウェア(パスワードを盗む可能性がある)
私は自分で発行した証明書ルートを以前から扱っており、提案したとおりに維持することは困難です。信頼できる当局から「本物の」SSL証明書を取得するためには、会社のITチャネルを介して作業する必要がありますが、正当な理由があれば実行可能かもしれません。 –
自己発行の証明書を再発行する - ADはあなたのマシンを発行することができます。ドメイン内の他のマシンによって自動的に信頼されます。 –
私はそのマークを知らなかった - それは良い情報です。私はまだADサーバーが(もちろん)会社全体のためであり、私たちの部門の宅配の外にあるので、承認を得なければならないかもしれません。しかし、それは会社のチャネルを通ることがより容易であるように聞こえる。 –