post Image
あなたのWebサービスでLDAPユーザ認証を実現するgo-ldapc

go-ldapc はLDAPによるユーザ認証を実現するモジュールです。

GoDoc

go-ldapc ただ1つのAPIを提供しています。

実装例

LDAPによるユーザログインをかんたんに実装することができます。

  • Code:
import (
    "github.com/sonatard/ldapc"
)

func main() {
    ldapclient := &ldapc.Client{
        Protocol:  ldapc.LDAP,
        Host:      "localhost",
        Port:      389,
        TLSConfig: nil,
        Bind: &ldapc.AuthBind{
            BindDN:       "uid=user1,ou=People,dc=test,dc=com",
            BindPassword: "admin",
            BaseDN:       "dc=test,dc=com",
            Filter:       "(&(objectClass=posixAccount)(uid=%s))",
        },
    }

    username := "user2"
    password := "user2"

    entry, err := ldapclient.Authenticate(username, password)
    if err != nil {
        fmt.Printf("LDAP Authenticate failed: %v\n", err)
    }

    // Print all entry
    fmt.Printf("%+v\n", entry)

    // username and mail
    fmt.Printf("username: %v\n", entry.GetAttributeValue("uid"))
    fmt.Printf("mail: %v\n", entry.GetAttributeValue("mail"))
}
  • Output:
username: user2
mail: user2@test.com

匿名Bind、DirectBind、サーバがActiveDirectoryの場合などのその他の実装例はこちら ldapc_test.go.

デモ

  • OpenLDAP Serverを立てる

  • クライアント環境を実行

$ go get -v github.com/sonatard/go-ldapc
$ cd ${GOPATH}/src/github.com/sonatard/go-ldapc/example
$ go run main.go
username: user2
mail: user2@test.com

作った経緯

LDAPはディレクトリ検索サービスでありユーザ認証プロトコルではありません。そのためLDAPのBind,Searchなどのオペレーションを組み合わせてユーザ認証を実装する必要があります。

Go言語向けのLDAPライブラリのgo-ldapBindSearchを実行するAPIであり、WebサービスにLDAPユーザ認証を提供しようと思うと、かんたんに利用できるものではありませんでした。

そこでLDAPの勉強を兼ねて誰でも容易にLDAPユーザ認証を実現できるGo言語のモジュールを作りました。

また私は、社内では自由にPublicなWebサービスを使える環境ではないので、類似のOSS Webサービスを使うことが多いのですが、この時にLDAP認証がないとユーザ管理が辛いので、是非皆さんGo言語でWebサービスをOSSで作る際にはLDAP認証の提供をよろしくお願いします! :smiley:

参考

  • gogs/gogs – /gogs/modules/auth/ldapの実装を参考にしました。 gogs開発者の皆さんありがとうございます。

『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。