パッケージ メイン
インポート (
"fmt"
"github.com/go-ldap/ldap/v3"
"log"
)
var (
ldapServer = "ldap:// localhost:389"
baseDN = "dc = vamdemic、dc = black"
username = " yuta "
password = "password"
bindusername = "cn = admin、dc = vamdemic、dc = black"
bindpassword = 「パスワード」
)
//この例は、典型的なアプリケーションがログイン試行を検証する方法を示しています
func Example_userAuthentication () {
l 、 err := ldap 。DialURL (ldapServer )
if err != nil {
log 。Fatal (err )
}
defer l 。閉じる()
//最初に読み取り専用ユーザー
err = lでバインドします。バインドする(bindusername 、 bindpassword )
if err != nil {
log 。致命的(err )
}
//指定されたユーザー名
searchRequest := ldapを検索します。NewSearchRequest (
ベースDN 、
LDAP 。ScopeWholeSubtree 、 LDAP 。NeverDerefAliases 、 0 、 0 、 偽、
FMT 。SPRINTF ("(&(オブジェクトクラス= organizationalPersonを)(CN =%S))" 、
ユーザ名)、
[] の文字列{ "DN" } 、
nil 、
)
sr 、 err := l 。検索(searchRequest )
if err != nil {
log 。致命的(err )
}
場合 でlen (SR 。エントリー) != 1 {
ログ。致命的(「ユーザーが存在しないか、返されるエントリが多すぎます」)
}
userdn := sr 。エントリー[ 0 ] 。DN
//ユーザーとしてバインドして、パスワードを確認します
err = l 。err != nil { logの場合、バインド(userdn 、 パスワード)
。致命的(err )}
//これ以降のクエリでは、読み取り専用ユーザーとして再バインドします
err = l 。バインドする(bindusername 、 bindpassword )
if err != nil {
log 。致命的(エラー)
}
}
func main () {
Example_userAuthentication ()
}