べるべる研究日誌

なんでもやる系エンジニアの日々

ADサーバーとの認証

ふと思い立って調べてみたら、昔かなり苦労してできなった社内のADサーバーでユーザー認証ができた。集中力の差だろうか...。

前はLDAPをいじくってあーだこーだやってできなかったけど、シンプルにするのがコツだったようなのでメモ。何か社内認証が必要なところで使えるような気がするのでメモ。

あと、Base指定が他のサンプルを参考にしたけど、うちのAD環境は少し違ったようなので社内ポータルの設定を見て解析してみました。

require 'rubygems'
require 'net/ldap'
require 'kconv'
require 'pp'

host = "adsv01.test-inc.local"
port = "389" #ポート番号
domain = "test-inc.local"
base   = 'OU=All-Users,DC=test-inc,DC=local'

user = "1234"
pass = "hogehogehoge"

conn = Net::LDAP.new(
  :host => host,
  :port => port,
  :auth => {
    :method => :simple,
    :username => "#{user}@#{domain}",
    :password => pass
  }
)
raise 'Auth Fail!' unless conn.bind
entries = Hash.new
conn.open { |ldap|
  filter = Net::LDAP::Filter.eq('samaccountname', "#{user}")
  ldap.search( :filter => filter, :base=> base ) do |entry|
    entry.each do |field, value|
      entries[field] = value
    end
  end
}
p entries[:mail]
pp entries