GolangでLDAPに接続する方法

藏色散人
リリース: 2021-05-31 10:10:18
転載
3670 人が閲覧しました

次のgolangのチュートリアル コラムでは、Golang を LDAP に接続する方法を紹介します。困っている友人の役に立てば幸いです。

今日は、Golang が ldap に接続する方法について書きます。

Golang にはいくつかの ldap パッケージがあり、私は

go get -u "gopkg.in/ldap.v2"
ログイン後にコピー

を使用します。私の ldap 環境:

rootdn: uid =admin,dc=wjq,dc=com パスワード: openldap

dn: dc=wjq,dc=com dc: wjq objectClass: top objectClass: domain dn: ou=Group,dc=wjq,dc=com ou: Group objectClass: top objectClass: organizationalUnit dn: ou=People,dc=wjq,dc=com ou: People objectClass: top objectClass: organizationalUnit dn: uid=admin,dc=wjq,dc=com uid: admin objectClass: top objectClass: account
ログイン後にコピー

グループとユーザー:

#组信息 dn: cn=test,ou=Group,dc=wjq,dc=com gidNumber: 1003 cn: test objectClass: posixGroup #用户信息 dn: uid=test,ou=People,dc=wjq,dc=com uidNumber: 1009 gidNumber: 1003 gecos: test homeDirectory: /home/test uid: test shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash shadowInactive: -1 shadowExpire: -1 shadowFlag: -1 objectClass: posixAccount objectClass: shadowAccount objectClass: account cn: test userPassword:: e1NTSEF9d053TWhYRTR4STJUUmpJWm5MTkF4VFlBTFhJdStaZ0Q= shadowLastChange: 17858
ログイン後にコピー

golang の処理手順は次のとおりです。

1. ldap 。 Dail #このステップは基礎となる接続です

2. ldap.Bind #ユーザー名とパスワードの認証と同様

# 3. クエリ、削除、ユーザーの追加などの操作

#ステップ 1: Dail## Dail には 2 つのパラメータがあります network, address, return (*Conn, error)

network: ネットワーク プロトコル tcp を指します。 udp

アドレス: 最下層に接続するアドレスであり、ポート番号が必要です

con, err := ldap.Dial("tcp", "127.0.0.1:389")
ログイン後にコピー

ステップ 2: 認証

Bind(rootdn,password) (error)

berror := conn.Bind("uid=admin,dc=wjq,dc=com", "openldap")
ログイン後にコピー

ステップ 3: 操作

;この操作は非常に独特ですおそらく、

クエリなどの Golang 言語の特性だと思います。データを入力して ldap.Search

を呼び出す限り、ldap はクエリ構造 -- ldap.NewSearchRequest を提供します。

Add、ldap 追加された構造体 (ldap.NewAddRequest) を提供し、データを入力してから ldap.Add

を呼び出して削除します。ldap は削除構造体 (ldap.NewDelRequest) を提供してから呼び出します。 ldap.Del

ユーザー パスワードの変更。ldap はユーザー パスワードを変更するための構造 -- ldap.NewPasswordModifyRequest を提供し、次に ldap.PasswordModify

を呼び出します。これは非常にユニークです。見てみましょう。

クエリ ユーザー グループ NewSearchRequest:

func NewSearchRequest( BaseDN string, Scope, DerefAliases, SizeLimit, TimeLimit int, TypesOnly bool, Filter string, Attributes []string, Controls []Control, ) *SearchRequest
ログイン後にコピー

BaseDN: 私の LDAP 環境によると、ou=Group,dc=wjq,dc=com

scope: 私が理解していることクエリのスコープ ldap はディレクトリ ツリー I 一般設定 ldap.ScopeWholeSubtree

DerefAiases: 検索でエイリアス (cn、ou) を破棄するかどうか、設定: ldap.NeverDerefAliases

SizeLimit: サイズ設定、通常は 0

## に設定 #TimeLimit: 時間設定、通常は 0

##TypesOnly: false に設定 (もう少し多くの値が返されるようです)

コントロール: これはあまり使用したことのないコントロールで、通常は nil に設定されています

これらを完全には理解していません。https://tools.ietf.org/html/rfc4511 を参照してください。

クエリの主な 2 つのパラメータは、Filter と Attributesです。

Filter は、フィルタ条件によって返される属性値です。

Attributes

SearchRequest 構造を作成します:

srsql := ldap.NewSearchRequest("ou=Group,dc=wjq,dc=com", ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, "(&(objectClass=posixGroup))", []string{"dn", "cn", "uid"}, nil)
ログイン後にコピー
フィルター: (&objectClass=posixGroup )) すべてのグループを検索し、各グループの dn、cn、uid を返しますフィルター テストユーザー グループ: (&(objectClass=posixGroup)(cn=test))

ユーザー cn= test または uid=test をフィルターします (もちろん、baseDn はユーザーのものです): "(|(&(objectClass=posixAccount) )(cn=test))(&(objectClass=posixAccount)(uid=test)))"

検索を実行して結果を取得します (cur.Entries 内):

cur, er := l.Search(srsql) if er != nil { log.Fatalln(er) } if (len(cur.Entries) > 0){ for _, item := range cur.Entries { cn := item.GetAttributeValue("cn") if cn == "" { cn = item.GetAttributeValue("uid") } fmt.Println(cn) } }
ログイン後にコピー
以上が検索の手順です。ユーザーの追加を見てみましょう: NewAddRequest

Add

ユーザー: wujq

パスワード: 123456

ホーム ディレクトリ: /home /wujq

所属するグループ: test (id=1003)

1. まず、追加する必要があるユーザー DN を確認します: uid=wujq,ou=People,dc= wjq,dc=com

2。gidNumber は 1003

3 です。uidNumber 値は必須なので、1010 (システムでは使用されません)

## に設定したとします。 #実行コードは次のとおりです:

sql := ldap.NewAddRequest("uid=wujq,ou=People,dc=wjq,dc=com") sql.Attribute("uidNumber", []string{"1010"}) sql.Attribute("gidNumber", []string{"1003"}) sql.Attribute("userPassword", []string{"123456"}) sql.Attribute("homeDirectory", []string{"/home/wujq"}) sql.Attribute("cn", []string{"wujq"}) sql.Attribute("uid", []string{"wujq"}) sql.Attribute("objectClass", []string{"shadowAccount", "posixAccount", "account"}) er := ldapcon.Add(sql)
ログイン後にコピー

以上がGolangでLDAPに接続する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!