Slide 1

Slide 1 text

2023-12-01 (Fri.) Tetsuya Morimoto go-ldap への コントリビューション

Slide 2

Slide 2 text

2 Kazamori LLC © 2023 ● 森本 哲也 (もりもと てつや) ● 神戸市在住 ●   カザモリ合同会社 ○ フルリモートワークで他社の開発のお手伝いをしている ■ 直近の事例: OSSTech株式会社様 システム開発 ● 課題管理 (課題管理システム) という分野に関心がある ● 言語歴は Python → Java → Go をそれぞれ5年ほどの実務経験 ● プログラミングや OSS 文化が好き 自己紹介

Slide 3

Slide 3 text

3 Kazamori LLC © 2023 目次 LDAP プロトコル概要 1. Go 開発と LDAP プロトコル 2. ID 連携に必要な機能をコントリビューション 3. リファレンス 4.

Slide 4

Slide 4 text

4 LDAP プロトコル概要

Slide 5

Slide 5 text

5 Kazamori LLC © 2023 ディレクトリサービスを提供するためのプロトコル ● デファクトスタンダードでよいはず ● 組織 (社員) の ID 管理などに使われている ○ 例) 外部サービスへ ID 連携するときに使う リファレンス ● LDAPとは:LDAPの仕組みと機能、プロトコル | Okta ● UCIDM 用語集 - Unicorn Cloud ID Manager (オンプレミス版) LDAP プロトコルとは ディレクトリサービス ネットワーク上の リソースに対して ID と名前を管理 するサービスの総称

Slide 6

Slide 6 text

6 Kazamori LLC © 2023 ● OpenLDAP サーバー ○ ミシガン大学のオリジナルの LDAP 実装から派生したもので OpenLDAP Project が開発しているサーバー実装 ● Active Directory サーバー ○ Windows 向けのマイクロソフト社のディレクトリサービスの実装 LDAP プロトコルのサーバー

Slide 7

Slide 7 text

7 Kazamori LLC © 2023 今回、紹介するのは検索リクエストの拡張で実現した事例になる ● LDAP メッセージという単位で LDAP オペレーションを扱う LDAP プロトコルの検索リクエストの拡張 LDAPMessage ::= SEQUENCE { messageID MessageID, protocolOp CHOICE { ..., searchRequest SearchRequest, ..., intermediateResponse IntermediateResponse }, controls [0] Controls OPTIONAL } 「コントール」 という データ構造により 検索を拡張する という考え方

Slide 8

Slide 8 text

8 Go 開発と LDAP プロトコル

Slide 9

Slide 9 text

9 Kazamori LLC © 2023 github.com/go-ldap/ldap というライブラリがある ● (名前が競合するので便宜上 go-ldap ライブラリと呼ぶ) ● Go 言語の LDAP クライアント実装のデファクトスタンダード (たぶん) ○ LDAP サーバーと通信するときに使うライブラリ ○ 開発者が LDAP プロトコルを知らなくても簡単に使える 例) ldapadd, ldapmodify, ldapdelete, ldappassword などの操作 go-ldap/ldap ライブラリ

Slide 10

Slide 10 text

10 ID 連携に必要な機能を コントリビューション

Slide 11

Slide 11 text

11 Kazamori LLC © 2023 LDAP サーバーの情報が更新されたときにその変更を検知したい ID 連携に求められる要件 LDAP サーバー DB エントリ 社内の部署移動 パスワード変更 新入社員追加

Slide 12

Slide 12 text

12 Kazamori LLC © 2023 時刻指定のポーリング検索で変更を検知できる ● feat: enable DirSync control in search operation #436 ○ 検索リクエストにリクエストコントロールを追加して、 指定した日時以降に更新されたエントリーのみを取得する リファレンス ● LDAP_SERVER_DIRSYNC_OID control code Active Directory の DirSync ポーリング (2023-12-01以降)

Slide 13

Slide 13 text

13 Kazamori LLC © 2023 レプリケーションの仕組みを応用した pubsub 的なもの ● Add syncrepl (rfc-4533) consumer (persistent search) #447 ○ LDAP の検索リクエストにリクエストコントロールを追加する ○ サーバーの状態に応じた複数のレスポンスが返ってくる リファレンス ● OpenLDAP Software 2.6 Administrator's Guide: Replication ● RFC 4533 - The Lightweight Directory Access Protocol (LDAP) Content Synchronization Operation OpenLDAP サーバーの syncrepl 検索リクエスト レプリケーション

Slide 14

Slide 14 text

14 リファレンス

Slide 15

Slide 15 text

15 Kazamori LLC © 2023 OSSTech 社のテックブログに詳細があります ● OSSTech ブログ: go-ldap へのコントリビューション ● github.com/go-ldap/ldap このスライドで紹介した内容の詳細

Slide 16

Slide 16 text

ありがとうございました!