0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LDAP 認証について

Posted at

はじめに

LDAP認証について理解深めるために備忘録として残します。画像はAIで生成しております。

LDAP認証

LDAP(Lightweight Directory Access Protocol)は、
ユーザー情報(ID、パスワード、部署、メールアドレスなど)を
ディレクトリサーバで一元管理するためのプロトコルのこと

LDAP のデータ構造(DIT:Directory Information Tree)

LDAP はツリー構造(DIT)で情報を管理している

dc=example,dc=com
 ├── ou=People
 │    ├── uid=taro
 │    └── uid=hanako
 └── ou=Groups
      ├── cn=admin
      └── cn=dev
  • dc: ドメインを構成する要素
  • ou: 部署・組織
  • uid: ユーザーID
  • cn: グループ名

ユーザーは DN(Distinguished Name) で一意に識別されている。

例:
uid=taro,ou=People,dc=example,dc=com

LDAP認証フロー

一般的なLDAP認証は以下の2段階らしい

サービスアカウント(Bind DN)でBindし、ユーザーDNを検索

アプリケーションは DN を知らないため検索が必要

  1. アプリが Bind DN(サービスアカウント)でBind
  2. uid=taro を条件に検索(Search)
  3. ユーザーの DN を取得
     例:uid=taro,ou=People,dc=example,dc=com

ユーザーDN と パスワードで Bind(認証)

  1. 取得したユーザーDN とユーザー入力パスワードを使って再Bind
  2. LDAP サーバが内部でパスワード照合
  3. 成功(OK)または失敗(NG)を返す
  4. アプリが結果をユーザーに返す

image.png

パスワードの保存と照合の仕組み

LDAP に保存される userPassword 属性には、以下のような形式が入る

{SSHA}3ShFja1df90sdf...

代表的な方式:

  • {SHA}
  • {SSHA}(Salted SHA:ソルト付き)
  • {MD5}
  • {CRYPT}
  • {PBKDF2}(新しいOpenLDAPなど)
  • LDAP のパスワード照合は以下のようにしているよう
  1. クライアントはパスワードをそのまま送る(※TLS必須)
  2. LDAPサーバが
     保存されている方式に合わせて ハッシュ + ソルト処理を実施
  3. 保存値と一致するか比較
  4. 一致すれば認証成功

まとめ

  • ユーザー情報は階層構造(DIT)で管理され、DN で一意に識別される
  • 認証は 「サービスアカウントで検索してDNを取得」→「ユーザーDNでBindして認証」 の2段階
  • パスワード照合は LDAPサーバ側でハッシュ+ソルトを用いて実施
  • Simple Bind は必ず TLS/LDAPS とセットで使う

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?