Upgrade to Pro — share decks privately, control downloads, hide ads and more …

go-ldap Contribution

kazamori
November 30, 2023

go-ldap Contribution

Kobe Engineer SakeBash #2 ~神戸のエンジニアコミュニティを盛り上げよう LT
https://acall.connpass.com/event/302038/

kazamori

November 30, 2023
Tweet

More Decks by kazamori

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  4. 4
    LDAP プロトコル概要

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. 8
    Go 開発と
    LDAP プロトコル

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  13. 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
    検索リクエスト
    レプリケーション

    View full-size slide

  14. 14
    リファレンス

    View full-size slide

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

    View full-size slide

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

    View full-size slide