使用Delphi激活用户的Active Directory吗?

时间:2018-01-10 16:12:11

标签: active-directory delphi-2007

上个月,一名工人被解雇了。 HR将其AD帐户设置为无效。审计人员发现,这样的用户仍然可以访问主要的公司程序套件,因为我们拥有独立于AD的访问/身份验证。

我的客户已询问当用户登录我们的程序时,我们会在我们的身份验证中添加“有活动的AD帐户”。

我已经搜索了SO并找到了许多解决方案,但没有人能做到这一点。

unit LDAPMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Vcl.StdCtrls, uADSI;

type
  TfrmElDapo = class(TForm)
    btnGetUser: TButton;
    edtDomain: TEdit;
    edtUser: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Memo1: TMemo;
    edtGroup: TEdit;
    Label3: TLabel;
    procedure btnGetUserClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Memo1DblClick(Sender: TObject);
  private
   ADSI: TADSI;
    { Private declarations }
  public
    { Public declarations }
  sdomain : string;
  sUID, sUserName, sDescription, sGroup : string;
  UserInfo :  uADSI.TADSIUserInfo;
  bDisabled:boolean;
 bLockedOut:boolean;
  end;

var
  frmElDapo: TfrmElDapo;

implementation

{$R *.dfm}

procedure TfrmElDapo.btnGetUserClick(Sender: TObject);
begin
sdomain     := edtDomain.Text;
susername   := edtUser.Text;
sGroup      := edtGroup.Text;
  adsi.GetUser(domain, username, UserInfo);
  with UserInfo do
  begin
  sUID          :=   UID;
  sUserName     :=   UserName;
  sDescription  :=   Description;
  bDisabled     :=   Disabled;
  bLockedOut    :=   LockedOut;
  end;
  memo1.Lines.Add('UID: '+sUID);
  memo1.Lines.Add('UserName: '+sUserName);
  memo1.Lines.Add('Description: '+sDescription);
  memo1.Lines.Add('Disabled: '+BoolToStr(bDisabled));
  memo1.Lines.Add('LockedOut: '+BoolToStr(bLockedOut));
end;

procedure TfrmElDapo.FormCreate(Sender: TObject);
begin
  ADSI := TADSI.Create(self);
end;

procedure TfrmElDapo.FormDestroy(Sender: TObject);
begin
  FreeAndNil(ADSI);
end;

procedure TfrmElDapo.Memo1DblClick(Sender: TObject);
begin
  Memo1.Clear;
end;

end.

在运行上述操作时,它会正确地回退用户名,但始终将AD帐户显示为活动状态,尽管它们已处于非活动状态多年!我的客户似乎认为这种异常是由于这一事实 nsLookup DomainName返回超过50台服务器,搜索返回第一个。我不知道这是如何运作的,或者他的解释是否正确。

我并不是假装成为一名AD大师,并且只是偶尔涉足它。

虽然我尝试过ADO查询,但此时我正在使用ADSI 简而言之,我想要的只是输入用户的AD登录信息并知道他/她是否处于活动状态。完成此任务的最佳/最小代码是什么?

0 个答案:

没有答案