VBAからADSIを使用してActive Directoryユーザー認証を行う

PROGRAMMING

対象読者と目的:
AccessやExcelで、VBAを使用してActive Directoryユーザー認証機能を実装してみたい、という方向けに実装方法を解説しています。

環境は、Access 2016、Windows 10 Professionalで検証しています。

What is ADSI?

ADSI (Active Directory Service Interfaces)は、Active DirectoryのためのCOMインタフェース。

VBAからのActive Directory認証を実装するには、このADSIを使用します。

今回はLDAPを使用するため問題にはなりませんが、Win NT Providerを使用する場合、セキュリティ上の問題点があるそうで注意が必要です。
詳細は以下のMSサイトを参照下さい。

User authentication issues with the Active Directory Service Interfaces WinNT provider

実装例

Dim namespace As Object
Dim rtn As Object

Const ADS_SECURE_AUTHENTICATION = 1

On Error Resume Next

Err.Clear
Set namespace = GetObject("LDAP:")
Set rtn = namespace.OpenDSObject("ドメイン名", "ユーザー名", "パスワード", 
ADS_SECURE_AUTHENTICATION) 

If (Err.Number = 0) Then
  '認証に成功
Else
  '認証に失敗
End If

On Error GoTo 0

Set namespace = Nothing
Set rtn = Nothing

ドメイン名の箇所は、正確には識別子 (Distinguished Names)を指定できます。

Microsoftのコーディング例に記載されていますが、ADS_SECURE_AUTHENTICATIONの利用が推奨されています。

For security reasons, it is recommended that you use the ADS_SECURE_AUTHENTICATION flag.

Authentication (ADSI)

引数についての補足

ADS_SECURE_AUTHENTICATION

下の引用の通り、セキュアな認証を要求するためのフラグ。
Active Directoryは既定でKerberos認証を使用します(Kerberos認証でネゴシエートできない場合はNTLMを使用)。

ADS_SECURE_AUTHENTICATION

Requests secure authentication. When this flag is set, the WinNT provider uses NT LAN Manager (NTLM) to authenticate the client. Active Directory will use Kerberos, and possibly NTLM, to authenticate the client. When the user name and password are NULL, ADSI binds to the object using the security context of the calling thread, which is either the security context of the user account under which the application is running or of the client user account that the calling thread represents.

ADS_AUTHENTICATION_ENUM enumeration

ADS_USE_ENCRYPTION

ネットワーク上のデータの暗号化を要求するフラグも存在しますが、既定のKerberos認証自体が通信を暗号化する仕組みを備えていますので、指定せずとも大丈夫でしょう。
(実際、Microsoftの実例でも付けられていないし)

ADS_USE_ENCRYPTION

Requires ADSI to use encryption for data exchange over the network.

ADS_AUTHENTICATION_ENUM enumeration

 

以上です。

 

参考
Active Directory Service Interfaces (Microsoft)

 

アイキャッチ画像は、Gerd AltmannによるPixabayから。