2

私が持っているのは、ドメインユーザーがLDAP資格情報に対して認証されることを可能にする機能です。しかし、それは生の文字列として知られているパスワードをハードコードしている限り長く働いています...もちろんノー・ノーです。私はTextBoxから受け取った文字列値を渡したいと思います。ここでは関数は次のとおりです。私がしようとした何文字列変数をニュルンクリデンシャルに渡すパスワードアークのためのコンストラクタ

public static bool fnValLDAPCreds() 
    { 
     bool validation;         

     try 
     {     

      LdapConnection ADConn = new LdapConnection(new LdapDirectoryIdentifier((string)null, false, false)); 
      NetworkCredential NetCred = new NetworkCredential(Environment.UserName, "Password123", Environment.UserDomainName); 

      ADConn.Credential = NetCred; 
      ADConn.AuthType = AuthType.Negotiate; 
      // the user's authenticated here; creds used to login on the domain controller. 

      ADConn.Bind(NetCred); 
      validation = true; 
      MessageBox.Show("You were successfully authenticated against AD using LDAP!"); 
     } 

     catch (LdapException) 
     { 
      validation = false; 
      MessageBox.Show("Your login was unsuccesful. Try a different set of credentials."); 
     } 

     return validation; 
    } 

は私のTextBoxからの値で代用したが、それは私がコントロールに任意の外部参照を行うことで成功していないstatic boolにあるので、現在のコンテキスト。私はそれを消すためにボタンハンドラでこの関数を呼び出しています。 string DomPassWord変数を取得するために設定したテキストボックスからその値を取得する変数はどうやって交換できますか?

NetworkCredential NetCred = new NetworkCredential(Environment.UserName, DomPassWord, Environment.UserDomainName);ドメイン内のパスワードをハードコードなしで安全に一致させるために、DomPassWord = txtUserPW.Textなどを使用しています。 SecureStringルートを試しましたが、その点でも失敗しました。何か案は?

+2

fnValLDAPCredsメソッドに 'string password'引数を追加し、' 'Password'''を' password'で置き換えて 'fnValLDAPCreds(myTextBox.Text)'のように呼び出すのはなぜですか?またはあなたの質問があまり明確でない –

+0

大きな画像を視覚化するのに問題があります。 'bob'としてログインしているユーザーがパスワードを再入力させることで実際にボブになっていることを確認するには、これをしていますか?あるいは、資格証明を完成させるためにそれを他の場所で議論として使用していますか? – Kevin

答えて

5

静的メソッド内のテキストボックスにアクセスすることはできません。スタティックメソッドではないからです(少なくとも書いたものと似ています)。

しかし、引数をメソッドに渡すだけで済みます。

public void ButtonClick(object sender, EventArgs args) 
{ 
    // bool valid = fnValLDAPCreds(Environment.UserName, "Password123", Environment.UserDomainName); 
    bool valid = fnValLDAPCreds(txtUserName.Text, txtUserPW.Text, Environment.UserDomainName); 
} 

public static bool fnValLDAPCreds(string username, string password, string domain) 
{ 
    try 
    { 
     LdapConnection ADConn = new LdapConnection(new LdapDirectoryIdentifier((string)null, false, false)); 
     NetworkCredential NetCred = new NetworkCredential(username, password, domain); 

     ADConn.Credential = NetCred; 
     ADConn.AuthType = AuthType.Negotiate; 
     // the user's authenticated here; creds used to login on the domain controller. 

     ADConn.Bind(NetCred); 
     MessageBox.Show("You were successfully authenticated against AD using LDAP!"); 
     return true; 
    } 
    catch (LdapException) 
    { 
     MessageBox.Show("Your login was unsuccesful. Try a different set of credentials."); 
     return false; 
    } 
} 
+0

洞察力のある皆様、ありがとうございました。目標は言われた通りです...チャーリーが本当に "チャーリー"であることを確認してください...チャーリーは自分のドメインIDとドメインパスワードを知っている人です。 – DesignerMind

+0

さらに詳しく説明すると、NTLMが正しいユーザー名に基づいて信用を渡すことは望ましくありません。チャーリーがばかばかしいパスワード文字列に変わった場合、彼はその文字列を入力して認証される必要があります。この時点で、私は 'SecureString'でパスワードを暗号化し、ボックスに' UseSystemPasswordChar'を設定することもできますが、機能するためには文字列の渡し方が曖昧でした! – DesignerMind

0

ちょっと接線が、あなたはAuthType.Ntlmについて考えている:このような何かにそれを変更しますか?もしあなたがこれをやっているのであれば、彼のパスワードを入力することで、ユーザー「チャーリー」がチャーリーであることを確認することでしょうか?それからあなたは正しい道を歩いています。しかし、ADに接続する方法として現在のユーザーの資格情報を使用してADに接続しようとしている場合は、そして、あなたは

ADConn.AuthType = AuthType.Ntlm; 

を見てみたいかもしれない...とさせる窓があなたのためにこれを処理していない(まったくパスワードでユーザータイプを持ってする必要が - 。それは彼らの現在のWindows資格情報を使用します)

関連する問題