Table of Contents |
---|
English |
---|
IntroductionThis article describes the single sign-on (SSO) setup between Joget and Microsoft Active Directory using Kerberos and SPNEGO. Kerberos is a network authentication protocol designed by the Massachusetts Institute of Technology (MIT) for SSO in client-server environments, while SPNEGO (Simple and Protected GSS-API Negotiation Mechanism) extends Kerberos SSO to web applications. |
Thai |
---|
บทนำ
Kerberos เป็นโปรโตคอลการตรวจสอบความถูกต้องเครือข่ายที่ออกแบบโดย Massachusetts Institute of Technology (MIT) สำหรับ SSO ในสภาพแวดล้อมของไคลเอนต์ - เซิร์ฟเวอร์ในขณะที่ SPNEGO (กลไกการเจรจาต่อรอง GSS-API ที่ง่ายและมีการป้องกัน) ขยาย Kerberos SSO ไปยังเว็บแอปพลิเคชัน |
Test Environment
Thai |
---|
สภาพแวดล้อมการทดสอบ |
Joget Server: Joget Workflow v6 Enterprise on Apache Tomcat 8 and Java 8
Windows Server: Windows Server 2012 R2 Datacenter (running on VirtualBox within a NAT Network, downloaded from https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2012-r2)
Windows Client PC: IE11 on Windows 10 (running on VirtualBox within a NAT Network, downloaded from https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/)
Test Settings
Thai |
---|
ทดสอบการตั้งค่า |
Windows Server COMPUTER NAME is WIN-TKDH9LCHUUO
WINDOWS DOMAIN is windows.local
DOMAIN USER is joget
JOGET DOMAIN is joget.windows.local
Info | ||||
---|---|---|---|---|
|
Kerberos SSO Setup Configuration
1. Setup Windows Server Kerberos Key Distribution Center (KDC):
Thai |
---|
Kerberos SSO Setup Configuration
|
1.1 Install DNS Server
Thai |
---|
ติดตั้งเซิร์ฟเวอร์ DNS |
Go to Server Manager > Add roles and features to install the DNS Server.
Thai ไปที่ตัวจัดการเซิร์ฟเวอร์> เพิ่มบทบาทและคุณสมบัติเพื่อติดตั้งเซิร์ฟเวอร์ DNS
In the Network and Sharing Center, configure the network adapter so that the Preferred DNS server is 127.0.0.1.
Thai ในศูนย์เครือข่ายและการใช้ร่วมกันกำหนดค่าการ์ดเชื่อมต่อเครือข่ายเพื่อให้เซิร์ฟเวอร์ DNS ที่ต้องการคือ 127.0.0.1
In the DNS Manager, right click on the server name and Configure a DNS Server to create a forward lookup zone for windows.local.
Thai ในตัวจัดการ DNS คลิกขวาที่ชื่อเซิร์ฟเวอร์และกำหนดค่าเซิร์ฟเวอร์ DNS เพื่อสร้างโซนการค้นหาแบบส่งต่อสำหรับ windows.local
1.2 Add Joget Domain Name into the Windows Server DNS
Thai |
---|
เพิ่มชื่อโดเมน Joget ใน Windows Server DNS |
In the windows.local DNS zone, add an A record for joget to point to the Joget server IP.
Thai ในโซน windows.local DNS เพิ่มระเบียน A สำหรับ joget เพื่อชี้ไปที่ IP เซิร์ฟเวอร์ Joget
Test ping to ensure that joget.windows.local resolves to the correct IP.
Thai ทดสอบ ping เพื่อให้แน่ใจว่า joget.windows.local แก้ไขเป็น IP ที่ถูกต้อง
1.3 Create a Windows Domain User for the Service
Thai |
---|
สร้างผู้ใช้โดเมน Windows สำหรับบริการ |
In Active Directory Users and Computers, create a domain user joget. This is the user account to be mapped to the service name used by the Joget server.
Thai ในผู้ใช้ Active Directory และคอมพิวเตอร์สร้าง joget ผู้ใช้โดเมน นี่คือบัญชีผู้ใช้ที่จะแมปกับชื่อบริการที่ใช้โดยเซิร์ฟเวอร์ Joget
1.4 Register Service Principal Name (SPN)
Thai |
---|
ลงทะเบียนชื่อบริการหลัก (SPN) |
In PowerShell, execute: setspn -s HTTP/{JOGET DOMAIN} {DOMAIN USER} e.g.
Thai ใน PowerShell ให้ดำเนินการ: setspn -s HTTP / {JOGET DOMAIN} {DOMAIN USER} เช่น
Code Block setspn -s HTTP/JOGET.WINDOWS.LOCAL joget
In PowerShell, check that the SPN has been registered
Thai |
---|
ใน PowerShell ให้ตรวจสอบว่า SPN ได้รับการลงทะเบียนแล้ว |
Code Block |
---|
setspn -L joget |
should display
Thai |
---|
ควรแสดง |
Code Block |
---|
Registered ServicePrincipalNames for CN=Joget,CN=Users,DC=windows,DC=local: HTTP/JOGET.WINDOWS.LOCAL |
2. Setup Joget Server for Kerberos
Thai |
---|
ติดตั้งเซิร์ฟเวอร์ Joget สำหรับ Kerberos |
2.1 Add Windows Domain to Hosts File
Thai |
---|
เพิ่มโดเมน Windows ไปที่ไฟล์ Hosts |
Edit /etc/hosts (Linux or macOS) or C:\Windows\System32\drivers\etc\hosts (Windows) and add the server IP e.g.
Thai แก้ไข / etc / hosts (Linux หรือ macOS) หรือ C: \ Windows \ System32 \ drivers \ etc \ hosts (Windows) และเพิ่ม IP ของเซิร์ฟเวอร์เช่น
Code Block 192.168.56.102 windows.local win-tkdh9lchuuo win-tkdh9lchuuo.windows.local
Info NOTE: This step is not required if the Joget Server is using the Windows Server as the DNS server.
Thai หมายเหตุ: ขั้นตอนนี้ไม่จำเป็นหากเซิร์ฟเวอร์ Joget ใช้ Windows Server เป็นเซิร์ฟเวอร์ DNS
2.2 Create Kerberos Identification (Keytab) File
Thai |
---|
สร้างไฟล์การระบุ Kerberos (Keytab) |
Using Windows
Thai |
---|
ใช้งาน Windows |
In PowerShell on the Windows Server, generate a keytab file using the Ktpass tool:
Thai ใน PowerShell บน Windows Server ให้สร้างไฟล์ตารางคีย์โดยใช้เครื่องมือ Ktpass:
Code Block ktpass -out joget.keytab -mapuser joget@WINDOWS.LOCAL -pass Pass@word1 -crypto all -ptype KRB5_NT_PRINCIPAL -princ HTTP/joget.windows.local@WINDOWS.LOCAL
Copy the generated joget.keytab file into the Joget server e.g. at C:\Joget-v6-Enterprise\wflow\joget.keytab
Thai คัดลอกไฟล์ joget.keytab ที่สร้างไปยังเซิร์ฟเวอร์ Joget เช่น ที่ C: \ Joget-v6-Enterprise \ wflow \ joget.keytab
Java 8 may be required for the Kerberos authentication to work with the ktpass generated keytab. Download and install JDK 8, and edit the tomcat-run.bat startup script to update the JAVA_HOME path accordingly.
Thai อาจจำเป็นต้องใช้ Java 8 สำหรับการพิสูจน์ตัวตน Kerberos เพื่อทำงานกับ ktpass keytab ที่สร้างขึ้น ดาวน์โหลดและติดตั้ง JDK 8 และแก้ไขสคริปต์เริ่มต้น tomcat-run.bat เพื่ออัปเดตพา ธ JAVA_HOME ตามลำดับ
Create a krb5.ini file under C:\Windows folder with these configurations:
Thai สร้างไฟล์ krb5.ini ภายใต้โฟลเดอร์ C: \ Windows ด้วยการกำหนดค่าเหล่านี้:
Code Block [libdefaults] default = WINDOWS.LOCAL default_realm = WINDOWS.LOCAL dns_lookup_realm = true dns_lookup_kdc = true [realms] WINDOWS.LOCAL = { kdc = WIN-TKDH9LCHUUO.WINDOWS.LOCAL:88 default_domain = WINDOWS.LOCAL } [domain_realm] .windows.local = WINDOWS.LOCAL windows.local = WINDOWS.LOCAL
Using Linux
Install the krb5-user package
Thai ติดตั้งแพ็คเกจผู้ใช้ krb5
Code Block sudo apt-get install krb5-user
and configure the realm as WINDOWS.LOCAL and the KDC as WIN-TKDH9LCHUUO.WINDOWS.LOCAL:88
Thai และกำหนดค่า realm เป็น WINDOWSLOCAL และ KDC เป็น WIN-TKDH9LCHUUO.WINDOWS.LOCAL: 88
In a terminal, run
Thai ในเทอร์มินัลให้เรียกใช้
Code Block kinit joget@WINDOWS.LOCAL
Info IMPORTANT NOTE: The domain must be UPPER CASE
Thai หมายเหตุที่สำคัญ: โดเมนจะต้องเป็นกรณีบน
The command should run without errorThai คำสั่งควรรันโดยไม่มีข้อผิดพลาด
Confirm the configuration in /etc/krb5.conf
Thai ยืนยันการกำหนดค่าใน /etc/krb5.conf
Code Block [libdefaults] default = WINDOWS.LOCAL default_realm = WINDOWS.LOCAL dns_lookup_realm = true dns_lookup_kdc = true [realms] WINDOWS.LOCAL = { kdc = WIN-TKDH9LCHUUO.WINDOWS.LOCAL:88 default_domain = WINDOWS.LOCAL } [domain_realm] .windows.local = WINDOWS.LOCAL windows.local = WINDOWS.LOCAL
Info IMPORTANT NOTE: The domain must be UPPER CASE
Thai หมายเหตุที่สำคัญ: โดเมนจะต้องเป็นกรณีบน
In a terminal, generate a keytab file using:
Thai ในเทอร์มินัลสร้างไฟล์ keytab โดยใช้:
Code Block ktutil ktutil: add_entry -password -p HTTP/JOGET.WINDOWS.LOCAL@WINDOWS.LOCAL -k 1 -e arcfour-hmac-md5 Password for HTTP/JOGET.WINDOWS.LOCAL@WINDOWS.LOCAL: ktutil: wkt /etc/joget.keytab
List the SPNs in the keytab using:
Thai แสดงรายการ SPN ในแท็บตารางโดยใช้:
Code Block ktutil ktutil: rkt /etc/joget.keytab ktutil: list
Using macOS
In a terminal, run
Thai ในเทอร์มินัลให้เรียกใช้
Code Block kinit joget@WINDOWS.LOCAL
Info IMPORTANT NOTE: The domain must be UPPER CASE
Thai หมายเหตุที่สำคัญ: โดเมนจะต้องเป็นกรณีบน
The command should run without error, or just a warning “Encryption type arcfour-hmac-md5(23) used for authentication is weak and will be deprecated”Thai คำสั่งควรทำงานโดยไม่มีข้อผิดพลาดหรือเพียงแค่คำเตือน“ ประเภทการเข้ารหัส arcfour-hmac-md5 (23) ที่ใช้สำหรับการตรวจสอบความถูกต้องอ่อนแอและจะถูกคัดค้าน”
Edit /etc/krb5.conf
Thai แก้ไข /etc/krb5.conf
Code Block [libdefaults] default = WINDOWS.LOCAL default_realm = WINDOWS.LOCAL dns_lookup_realm = true dns_lookup_kdc = true [realms] WINDOWS.LOCAL = { kdc = WIN-TKDH9LCHUUO.WINDOWS.LOCAL:88 default_domain = WINDOWS.LOCAL } [domain_realm] .windows.local = WINDOWS.LOCAL windows.local = WINDOWS.LOCAL
Info IMPORTANT NOTE: The domain must be UPPER CASE
Thai หมายเหตุที่สำคัญ: โดเมนจะต้องเป็นกรณีบน
In a terminal, generate a keytab file using:
Thai ในเทอร์มินัลสร้างไฟล์ keytab โดยใช้:
Code Block ktutil -k joget.keytab add -p HTTP/JOGET.WINDOWS.LOCAL@WINDOWS.LOCAL -e arcfour-hmac-md5 -V 1
List the SPNs in the keytab using:
Thai แสดงรายการ SPN ในแท็บตารางโดยใช้:
Code Block ktutil -k joget.keytab list
Keep a copy of the generated joget.keytab file e.g. in /etc/joget.keytab
Thai เก็บสำเนาของไฟล์ joget.keytab ที่สร้างขึ้นเช่น ใน /etc/joget.keytab
3. Configure Kerberos Directory Manager Plugin
Thai |
---|
กำหนดค่าปลั๊กอินตัวจัดการไดเรกทอรีของ Kerberos |
3.1 Upload Kerberos Directory Manager Plugin
Thai |
---|
อัปโหลดปลั๊กอินเครื่องมือจัดการไดเรกทอรีของ Kerberos |
Download the Kerberos Directory Manager plugin from the Joget Marketplace and upload it in Settings > Manage Plugins.
Thai ดาวน์โหลดปลั๊กอิน Kerberos Directory Manager plugin จาก Joget Marketplace และอัปโหลดในการตั้งค่า> จัดการปลั๊กอิน
3.2 Configure Kerberos Directory Manager Plugin
Thai |
---|
กำหนดค่าปลั๊กอินตัวจัดการไดเรกทอรีของ Kerberos |
In Settings > Directory Manager, select the Kerberos Directory Manager plugin, and key in the appropriate values in the configuration:
Thai ในการตั้งค่า> ตัวจัดการไดเรกทอรีเลือกปลั๊กอิน Kerberos Directory Manager และป้อนค่าที่เหมาะสมในการกำหนดค่า:
Service Principal: HTTP/JOGET.WINDOWS.LOCAL
Path to Keytab File: /etc/joget.keytab (Linux) or C:/Joget-v6-Enterprise/wflow/joget.keytab (Windows)
Debug Enabled: View debugging messages in the logs
Note Please remember to configure the LDAP Directory Manager as external directory manager to retrieve users from Active Directory.
Thai โปรดจำไว้ว่าให้กำหนดค่าตัวจัดการไดเรกทอรี LDAP เป็นตัวจัดการไดเรกทอรีภายนอกเพื่อดึงผู้ใช้จาก Active Directory
3.3 Configure API Domain Whitelist
Thai |
---|
กำหนดค่ารายการโดเมนที่อนุญาตพิเศษของ API |
In Settings > General Settings, set the API Domain Whitelist to * to allow SSO requests to the Kerberos Directory Manager.
Thai ในการตั้งค่า> การตั้งค่าทั่วไปให้ตั้งค่ารายการโดเมนที่อนุญาตพิเศษเป็น * เพื่ออนุญาตให้คำขอ SSO เป็น Kerberos Directory Manager
4. Setup Client PC for SSO
Thai |
---|
ตั้งค่าไคลเอ็นต์พีซีสำหรับ SSO |
4.1 Add Client PC to Windows Domain
Thai |
---|
เพิ่มไคลเอ็นต์ PC ในโดเมน Windows |
Ensure that the Windows Server is reachable on the network from the Client PC.
Thai ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ Windows สามารถเข้าถึงได้บนเครือข่ายจากไคลเอนต์พีซี
Set the DNS server to the IP address of the Windows Server.
Thai ตั้งค่าเซิร์ฟเวอร์ DNS เป็นที่อยู่ IP ของ Windows Server
Ping the windows domain name to test.
Thai Ping ชื่อโดเมน windows เพื่อทดสอบ
Click on File Explorer, right click on the This PC and choose Properties. Click on Change Settings next to the computer name. Click on Change and set the Domain e.g. windows.local, keying in the domain administrator login when prompted. Restart after joining the domain is successful, and login as a domain user.
Thai คลิกที่ File Explorer คลิกขวาที่พีซีนี้และเลือกคุณสมบัติ คลิกที่เปลี่ยนการตั้งค่าถัดจากชื่อคอมพิวเตอร์ คลิกที่เปลี่ยนและตั้งค่าโดเมนเช่น windows.local โดยพิมพ์ชื่อผู้ดูแลระบบโดเมนเมื่อได้รับแจ้ง รีสตาร์ทหลังจากเข้าร่วมโดเมนสำเร็จแล้วและเข้าสู่ระบบในฐานะผู้ใช้โดเมน
4.2 Setup Browser for Windows Authentication
Thai |
---|
ตั้งค่าเบราว์เซอร์สำหรับ Windows Authentication |
In IE, click on Internet Options > Security > Local intranet site > Advanced and add the Joget domain e.g. http://joget.windows.local
Thai ใน IE คลิกที่ตัวเลือกอินเทอร์เน็ต> ความปลอดภัย> ไซต์อินทราเน็ตเฉพาะที่> ขั้นสูงและเพิ่มโดเมน Joget เช่น http: //joget.windows.local
4.3 Test the SSO
Thai |
---|
ทดสอบ SSO |
Using the Kerberos Directory Manager plugin approach, access http://joget.windows.local/jw/web/json/plugin/org.joget.plugin.kerberos.KerberosDirectoryManager/service to SSO.
Thai ใช้วิธีการปลั๊กอินตัวจัดการไดเรกทอรีของ Kerberos เข้าถึง http://joget.windows.local/jw/web/json/plugin/org.joget.plugin.kerberos.KerberosDirectoryManager/service ไปยัง SSO
Info Please note that for the SSO to work properly:
Thai โปรดทราบว่าเพื่อให้ SSO ทำงานอย่างถูกต้อง:
the client PC and Joget server must reside on different machines
Thai พีซีไคลเอนต์และเซิร์ฟเวอร์ Joget ต้องอยู่ในเครื่องที่ต่างกัน
the Windows server and client PC must reside on the same Windows domain
Thai เซิร์ฟเวอร์ Windows และพีซีไคลเอ็นต์ต้องอยู่ในโดเมน Windows เดียวกัน
Resources
Thai |
---|
ทรัพยากร |
Introduction to Kerberos and SPNEGO
Configuring Kerberos on Windows Server
https://technet.microsoft.com/en-us/library/hh831553(v=ws.11).aspx
https://msftplayground.com/2009/08/configure-kerberos-authentication/
https://technet.microsoft.com/en-us/library/cc731241(v=ws.11).aspx
https://technet.microsoft.com/en-us/library/hh831553(v=ws.11).aspx
https://msftplayground.com/2009/08/configure-kerberos-authentication/
Kerberos with Java and Spring
https://venkatsadasivam.com/2009/08/29/single-sign-on-in-java-platform/
http://docs.spring.io/spring-security-kerberos/docs/1.0.1.RELEASE/reference/htmlsingle/
https://tomcat.apache.org/tomcat-8.0-doc/windows-auth-howto.html
http://docs.oracle.com/javase/jndi/tutorial/ldap/security/gssapi.html
http://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/lab/part1.html#PART1
https://docs.oracle.com/cd/E23943_01/web.1111/e13707/sso.htm#SECMG481
https://stackoverflow.com/questions/25289231/using-gssmanager-to-validate-a-kerberos-ticket