「LDAP認証」とは何なのか?
はじめに
本記事では、「LDAP認証」と呼ばれる認証方式の何たるかについて、筆者の個人的見解を記載します。
以下のような話をします。
- LDAPとはディレクトリサービスにアクセスするための通信プロトコル
- LDAPそのものを保護するための認証機構をアプリケーションが(勝手に)流用したものが「LDAP認証」(だと筆者は考えている)
- アプリケーションがユーザーからパスワードを受け取らずに済むよう、シングルサインオン(SSO)でユーザー認証を実現するのがエンタープライズ環境でのベストプラクティス(だと筆者は考えている)
本記事における「LDAP認証」の定義
本記事では、アプリケーションが以下のようにユーザー認証することを「LDAP認証」と呼びます。
- ユーザーがアプリケーションに自身のユーザー名とパスワードを送信
- このユーザー名とパスワードの情報は事前にLDAPサーバー(※後述)に登録済
- 受け取ったユーザー名とパスワードを使ってアプリケーションがLDAPサーバーに問い合わせ
- LDAPサーバーからの応答により、アプリケーションはユーザー名とパスワードの組み合わせが正しいかどうかを知る
- ユーザー名とパスワードの組み合わせが正しければ、ユーザーはアプリケーションへのログインに成功
LDAPとは
LDAPとはLightweight Directory Access Protocolの略で、ディレクトリサービスにアクセスするための通信プロトコルです。
ディレクトリサービスというのはユーザー情報などを保管・提供するサービスのことです。ディレクトリサービスを構築するための代表的なソフトウェアにMicrosoftのActive Directoryなどがあります。
LDAPというプロトコルを通じてディレクトリサービスを提供する何かをLDAPサーバーと呼びます。
以下のようなイメージです。
参照だけではなく更新もできます。
LDAPは認証方式の名前でもなければ、ユーザー名とパスワードの組み合わせが正しいかを検証するための通信プロトコルでもありません。
では「LDAP認証」とは何なのでしょうか?
LDAP認証とは何なのか?(筆者の個人的見解)
筆者の個人的見解ですが、LDAP認証とは、LDAPそのものを保護するための認証機構をアプリケーションが(勝手に)流用したものだと考えています。
LDAPという通信プロトコルはユーザー情報の参照・更新などに使われます。言われてみれば当然かもしれませんが、誰でも何でも参照・更新できたら困るので、LDAPそのものにユーザー認証の機構が付いています。
以下のようなイメージです。
上記の1~3、つまりLDAPを保護するためのユーザー認証を、アプリケーションを保護するためのユーザー認証に流用したものがLDAP認証ではないか、ということです。
LDAP認証をマイナンバーカードで例えてみる
LDAP認証をマイナンバーカードで例えると、以下のように表現できそうです。
少なくとも筆者は「アカンやろ……」という気持ちになります。
より良い認証方法はあるか?
エンタープライズ環境においては、シングルサインオン(SSO)でユーザー認証を実現することがベストプラクティスだと筆者は考えています。
具体的にはKerberos、SAML、OpenID Connectといった、アプリケーションの認証に使用されることを想定したプロトコルを使います。これらのプロトコルを使用したユーザー認証では、アプリケーションがユーザーからパスワードを受け取る必要はありません。
まとめ
- LDAPとはディレクトリサービスにアクセスするための通信プロトコル
- LDAPそのものを保護するための認証機構をアプリケーションが(勝手に)流用したものが「LDAP認証」(だと筆者は考えている)
- アプリケーションがユーザーからパスワードを受け取らずに済むよう、シングルサインオン(SSO)でユーザー認証を実現するのがエンタープライズ環境でのベストプラクティス(だと筆者は考えている)
Discussion