คู่มือขั้นตอนการตั้งค่า SSO (Single Sign-On) แบบโปร่งใส ด้วย Kerberos Domain User Authentication บน IIS Website ที่รันบน Windows Server 2012 R2
ขั้นตอนการตั้งค่า
- เปิด IIS Manager → เลือก Website → Authentication ปิด Anonymous Authentication เปิด Windows Authentication (IIS ลอง Anonymous ก่อนเสมอ)
- เปิด Providers ของ Windows Authentication ค่าเริ่มต้นมี 2 ตัว: Negotiate และ NTLM Negotiate เป็น Container ใช้ Kerberos ก่อน หากล้มเหลวค่อย fallback ไป NTLM Negotiate ต้องอยู่ลำดับแรก
- ลงทะเบียน Service Principal Name (SPN) สำหรับชื่อ Website ที่ User จะเข้าถึง
- ถ้า Website ใช้ชื่อ Server จริง (https://server-name) ไม่ต้องสร้าง SPN เพิ่ม (มีอยู่ใน Computer Account ใน AD แล้ว)
- ถ้า Website ใช้ชื่ออื่น หรือเป็น Web Farm Load Balancing → ต้องสร้าง SPN เพิ่ม ผูกกับ Service Account
ตัวอย่างสร้าง SPN สำหรับ Web Farm
- สร้าง Domain Account: iis_service ตรวจสอบว่า servicePrincipalName ว่าง
- Website ต้องตอบสนองที่ https://webportal และ https://webportal.adatum.loc เพิ่ม SPN:
Setspn /s HTTP/webportal adatum\iis_service
Setspn /s HTTP/webportal.adatum.loc adatum\iis_service - ตรวจสอบ:
setspn /l iis_serviceตรวจสอบ Duplicate SPN:setspn –x
ตั้งค่า Application Pool
- เลือก Application Pool ของ Website (เช่น DefaultAppPool) → Advanced Settings → Identity
- เปลี่ยนจาก ApplicationPoolIdentity เป็น adatum\iis_service
- ไปที่ Website → Configuration Editor → system.webServer > security > authentication > windowsAuthentication
- เปลี่ยน useAppPoolCredentials = True (อนุญาต IIS ใช้ Domain Account ถอดรหัส Kerberos Tickets)
- Reset IIS:
iisreset
ตั้งค่าเดียวกันบน Web Farm Servers ทุกตัว
ทดสอบ Kerberos Authentication
เปิด https://webportal.adatum.loc ใน Browser Client Note: ใน IE11 อาจต้องเพิ่ม Address ใน Trusted Sites และตั้ง Automatic logon with current user name and password
ตรวจสอบว่าใช้ Kerberos จริงด้วย Fiddler: ดู HTTP Traffic หา Header Authorization Header (Negotiate) appears to contain a Kerberos ticket