0
public Object IsAuthenticated()
{
    String domainAndUsername = strDomain + "\\" + strUser;
    ***DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, strPass);***
    SearchResult result;
    try
    {
      //Bind to the native AdsObject to force authentication.         

      DirectorySearcher search = new DirectorySearcher(entry) { Filter = ("(SAMAccountName=" + strUser + ")") };

      search.PropertiesToLoad.Add("givenName"); // First Name                
      search.PropertiesToLoad.Add("sn"); // Last Name
      search.PropertiesToLoad.Add("cn"); // Last Name

      result = search.FindOne();

      if (null == result)
      {
          return null;
      }

      //Update the new path to the user in the directory.
      _path = result.Path;
      _filterAttribute = (String)result.Properties["cn"][0];
    }
    catch (Exception ex)
    {
        return new Exception("Error authenticating user. " + ex.Message);
    }
    return user;
}

上記のコード セグメントで、ユーザーの Windows ログイン パスワードを取得して、ユーザーに再度パスワードを要求することなく LDAP 認証が機能する方法はありますか? DirectoryEntry オブジェクトの作成時に渡される「strPass」の値は、何らかの方法で取得できますか?

4

3 に答える 3

2

パスワードはどこにも存在しません。もしそうなら、それは大きなセキュリティホールになるでしょう。

また、ところで、try/catchブロックを取り除きます。例外の理由を隠す以外に何もしていません。

于 2011-05-18T16:20:51.380 に答える
0

ActiveDirectoryMemebershipProviderを使用する-コードを記述せずに認証できるため、現在のログインシナリオを排除できます。

于 2011-05-18T16:21:22.937 に答える
0

ASP.NET アプリで Windows 認証を設定できます。

http://msdn.microsoft.com/en-us/library/ff647405.aspx これを設定すると、認証されたユーザーのみがサイトの保護された部分にアクセスできます。

これにより、いくつかの重要な情報にアクセスできます。

例えば:

System.Web.HttpContext.Current.User.Identity.Name- 認証されたユーザーの名前 (ドメイン\ユーザー名) を指定します。

System.Web.HttpContext.Current.User.IsInRole("role_name_here")- 認証されたユーザーが特定の役割に属しているかどうかがわかります。

初めて認証を行うのは難しい場合があります。ユーザーに Windows パスワードを尋ねないでください。これはセキュリティ上のリスクです。IIS と .NET フレームワークがこれを処理します。上記の記事は少し長く、少し複雑に見えるかもしれませんが、有益な情報がたくさん含まれています。

于 2011-05-18T17:53:57.813 に答える