การติดตั้ง Shibboleth Single Sign-On
ตอนที่ 11 - สลับแอพพลิเคชันโดยไม่ล็อกอินใหม่
16. ทดสอบกระโดดข้ามแอพพลิเคชัน
สิ่งที่เราต้องการที่สุดของ
Single Sign-On คือคุณสมบัติที่ทำให้ผู้ใช้ล็อกอินเข้ามาผ่านทางระบบใดระบบหนึ่งแล้วสามารถกระโดดไปใช้งานในอีกระบบหนึ่งได้โดยไม่จำเป็นต้องล็อกอินซ้ำ
ในขั้นตอนนี้จะสร้างแอพพลิเคชันขึ้น
3 ตัว โดย app1 กับ app2 จะเป็น PHP ส่วน app3
จะเป็น Java โดยไฟล์ที่ใช้ทดสอบจะอยู่ที่โฟลเดอร์
setup/samples เรียบร้อยแล้ว เพียงแต่ก็อปปีมาวางไว้ที่ c:\sso
และกำหนดค่าคอนฟิกของ httpd.conf กับ shibboleth2.xml
ให้ถูกต้อง
16.1 สร้างแอพพลิเคชัน app1 และ app2 และแก้ไขไฟล์ httpd.conf
ก็อปปีโฟลเดอร์ app1 และ app2 จาก c:\sso\setup\samples
วางไว้ที่ c:\sso แล้วเปิดไฟล์ httpd.conf
จากโฟลเดอร์ c:\sso\Apache2.2\conf ขึ้นมาแก้ไขดังนี้
ให้เพิ่ม index.php ให้กับ dir module ดังนี้
บันทึกไฟล์ httpd.conf ไว้แล้วไปที่ขั้นต่อไป
16.2 แก้ไขไฟล์ shibboleth2.xml
เปิดไฟล์ shibboleth2.xml จากโฟลเดอร์ c:\sso\shibboleth-sp\etc\shibboleth
ขึ้นมาแก้ไขดังนี้
สังเกตว่าเราจะแก้ Host name ให้เป็น 127.0.0.1 และเพิ่มพาธเข้าไปอีก 3 พาธคือ app1, app2 และ app3 แล้วบันทึกไฟล์ shibboleth2.xml ไว้
16.3 กำหนดค่า REMOTE_USER
เราจำเป็นต้องบอกให้ SP รู้ด้วยว่าจะนำเอาแอททริบิวท์ไหนมาทำเป็นค่า
Remote User สำหรับให้แอพพลิเคชันดึงไปใช้งาน ให้เปิดไฟล์ shibboleth2.xml
ขึ้นมาแก้ไขดังนี้
ขั้นตอนนี้สำคัญมากเนื่องจาก
user ที่เราใช้ที่ Apache
DS ไม่ได้ส่งแอททริบิวท์ eduPrincipalName มาเป็นแอททริบิวท์
eppn ดังนั้นหากใช้ eppn จะไม่มีชื่อผู้ใช้ติดอยู่ที่
Remote User
16.4 ทดสอบ app1 กับ app2
ให้รีสตาทร์ Apache Web Server และ Shibboleth 2.0
Daemon และ Tomcat ใหม่อีกครั้งแล้วเบราซ์ไปที่
http://127.0.0.1/app1 เมื่อทดลองล็อกอินเข้าระบบแล้วจะได้หน้าแรกเป็นดังนี้
หลังจากนั้นให้คีย์เข้าไปที่แอดเดรส
สลับไปที่ app2 โดยไม่ต้องปิดหน้าต่าง
จะต้องไม่ปรากฏหน้าต่างล็อกอินเข้าระบบอีก และสามารถกระโดดเข้าไปที่ http://127.0.0.1/app2
ได้ทันที ดังนี้
เมื่อมาถึงขั้นตอนนี้เราถือว่าการคอนฟิกเพื่อใช้
Single Sign-On กับ PHP มากกว่า 1 โปรแกรมขึ้นไปประสบผลสำเร็จแล้ว
แต่เรายังจำเป็นต้องคอนฟิกต่อเพื่อให้สามารถกระโดดข้ามจากแอพพลิเคชันที่เป็น PHP
ไปที่แอพพลิเคชันที่เป็น Java ได้ด้วย
17. ทำให้กระโดดข้ามจาก PHP มาที่ Java
ก็อปปีโฟลเดอร์ app3 ที่เป็นแอพพลิเคชัน Java จากโฟลเดอร์ c:\sso\setup\samples ไปวางไว้ที่ c:\sso\apache-tomcat-6.0.18\webapps
เพื่อรันเป็นเว็บแอพพลิเคชัน หลังจากนั้นให้รีสตาทร์ Tomcat ขึ้นมาใหม่
ทดสอบเข้าถึงหน้าเว็บใน app3 โดยเบราซ์ไปที่ http://127.0.0.1:8080/app3
ซึ่งควรจะปรากฏดังนี้
17.1 เปิดการใช้งาน AJP และ Proxy
Pass
เพื่อให้ส่งต่อการทำงานจาก Apache Web Server ไปที่โปรแกรม Java ที่รันอยู่ที่ Tomcat ได้เราจำเป็นต้องใช้โมดูล AJP
เป็นตัวช่วยเหลือ โดยเปิดไฟล์ httpd.conf ขึ้นมาแก้ไขดังนี้
รูปภาพ 98 ให้เอาคอมเมนต์ที่ mod_proxy.so
และ mod_proxy_ajp.so ออก
รูปภาพ 99 เพิ่ม ProxyPass และ Location /app3 เข้าไป
บันทึกไฟล์ httpd.conf ไว้แล้วไปที่ขั้นต่อไป
17.2 แก้ไขไฟล์ server.xml เพิ่ม tomcatAuthentication="false"
เปิดไฟล์ server.xml จากโฟลเดอร์ c:\sso\apache-tomcat-6.0.18\conf ขึ้นมาแก้ไขดังนี้
บันทึกไฟล์ server.xml ไว้แล้วไปที่ขั้นต่อไป
17.3 ทดสอบ app3
ให้รีสตาทร์ Shibboleth 2.0 Daemon, Apache Web Server และ Tomcat
ใหม่อีกครั้ง แล้วเบราซ์ไปที่ http://127.0.0.1/app3 หลังจากล็อกอินผ่านไปแล้ว IdP จะส่งการทำงานต่อไปที่แอพพลิเคชัน
และปรากฏหน้าเว็บดังนี้
ให้ทดลองรันหน้าเว็บ shibenv.jsp ต่อจาก /app3 จะได้ผลลัพธ์ดังนี้
ให้ทดลองกระโดดข้ามจาก Java ไปที่ PHP โดยพิมพ์ URL
เปลี่ยนจาก app3 เป็น app2 จะได้ผลลัพธ์ดังนี้
17.4 กระโดดจาก PHP ไปที่ Java
ทดสอบใหม่โดยล็อกอินเข้ามาจาก
app1 เป็น user2 และลองสลับไปที่ app3 เพื่อตรวจดูว่าสามารถสลับจาก PHP
มาที่ Java ได้โดยที่ไม่ต้องล็อกอินเข้าใหม่
และ Remote User ยังคงสามารถดึงออกมาตรวจสอบได้ตามปกติ
18. คำแนะนำสำหรับการติดตั้งบนเครื่องเซิร์ฟเวอร์มากกว่า
1 ตัว
ในกรณีที่ท่านนำไปใช้งานจริงและแยกการติดตั้ง
Service Provider และ Identity
Provider ออกเป็นเครื่องเซิร์ฟเวอร์ 2 เครื่อง
(หรือมากกว่านั้น)
ท่านสามารถใช้วิธีการดังกล่าวข้างต้นที่ได้ทดลองมาแล้ว
กับการติดตั้งแบบแยกเครื่องเซิร์ฟเวอร์ได้เช่นกัน
เพียงแต่จำเป็นต้องระบุเป็นชื่อเครื่องหรือ IP
Address ให้แยกกันออกไป โดยจะมีส่วนประกอบที่แตกต่างกันดังนี้
สังเกตจากภาพข้างบน
จะพบว่าที่เครื่อง SP เราจะใช้ IP
Address เป็นหมายเลข 192.168.0.10 และมีโปรแกรมติดตั้งไว้คือ
·
Apache 2.2
·
PHP
·
shibboleth-sp (Service
Provider)
ส่วนที่เครื่องที่มี IP Address เป็น 192.168.0.20 จะทำหน้าที่เป็น IdP และมีโปรแกรมติดตั้งไว้คือ
·
Apache Tomcat 6.0.18
·
shibboleth-idp
(Identity Provider)
·
apacheds (Apache
Directory Service – LDAP)
18.1 ตัวอย่างการกำหนดค่าคอนฟิกที่เครื่อง
Service Provider
ที่เครื่อง 192.168.0.10 ที่ทำหน้าที่เป็น Service
Provider จะมีจุดที่ต้องใช้ IP Address ดังต่อไปนี้
ที่ไฟล์ idp-metadata.xml ของทั้ง SP และ IdP มีจุดที่ต้องใช้ IP Address ดังต่อไปนี้
รูปภาพ 107 ที่แท็ก <ArtifactResolutionService> และ <SingleSignOnService> ของ IDPSSODescriptor ต้องชี้ไปที่ IdP
ที่ไฟล์ idp-metadata.xml ก่อนปิดแท็ก AttributeAuthorityDescriptor
ของตัว EntityDescriptor ของ IdP
ที่ไฟล์ idp-metadata.xml บริเวณด้านล่าง ภายในแท็ก <SPSSODescriptor>
ที่แท็ก AssertionConsumerService
รูปภาพ 109 ไฟล์ idp-metadata.xml ในแท็ก SPSSODescriptor แต่ละแท็ก AssertionConsumerService ต้องเป็น IP
Address ของ SP
ที่ไฟล์ shibboleth2.xml ของตัว SP ที่แท็ก Host ด้านบน
ไฟล์ shibboleth2.xml ที่เปิดแท็ก ApplicationDefaults
รูปภาพ 111 ไฟล์ shibboleth2.xml ที่แท็กเปิด
ApplicationDefaults ให้ใส่ homeURL ตรงกับ IP
Address ของ SP
สรุปว่าไฟล์ที่จำเป็นต้องแก้ไข
IP Address ที่ทางฝั่ง SP มีเพียง 3 ไฟล์คือ
·
httpd.conf
·
idp-metadata.xml และ
·
shibboleth2.xml
ส่วนไฟล์อื่นๆไม่จำเป็นต้องแก้ไข
IP Address และการกำหนดค่าคอนฟิกจะเป็นเช่มเดิม
ตามที่ได้ทดลองไว้
18.2 ตัวอย่างการกำหนดค่าคอนฟิกที่เครื่อง
Identity Provider (IdP)
สำหรับเครื่อง Identity Provider จำเป็นต้องกำหนดค่า IP
Address เข้าไปให้ถูกต้อง
·
เฉพาะไฟล์ idp-metadata.xml
โดยต้องเหมือนกับที่ Service Provider ส่วนไฟล์อื่นๆใช้วิธีการคอนฟิกแบบเดิมได้เลย
ส่วนการเชื่อมต่อกับ LDAP เราสามารถใช้ IP Address เป็น 127.0.0.1 ได้เพราะเราติดตั้ง Apache
Directory Service ไว้ที่เครื่องเดียวกันกับ Identity
Provider
18.3 ตัวอย่างการติดตั้งแบบแยกเครื่อง
จากการทดลองในเอกสารฉบับนี้
หากทดลองกับเครื่องคอมพิวเตอร์ 2 เครื่องที่มี
IP Address เป็น 192.168.0.10 และ 192.168.0.20
จะได้ผลลัพธ์ดังนี้
รูปภาพ 112 หลังจากติดตั้งเสร็จเบราซ์ไปที่ SP สมมุติว่าจะเข้าใช้งาน app1
จึงไปที่ https://192.168.0.10/app1
หาก Shibboleth ที่ SP และ IdP
เชื่อมต่อกันอย่างสมบูรณ์ จะปรากฏหน้าล็อกอินดังนี้
หลังจากล็อกอินเป็น user1 แล้วจะสลับกลับมาที่ SP ที่แอดเดรส 192.168.0.10 ดังนี้
และหากเปลี่ยนพาธจาก /app1 เป็น /app3 จะสามารถเข้าใช้งานแอพพลิเคชันที่เป็น
Java ได้ด้วย
รูปภาพ 115 สามารถกระโดดข้ามจาก app1 ไป app3 ได้โดยไม่ต้องล็อกอินใหม่ และ app3 รันอยู่ที่เครื่อง 192.168.0.20
18.4 ทำไมถึงติดตั้งด้วยวิธีการก็อปปีมาจากอีกเครื่องหนึ่งไม่ได้
หากต้องการติดตั้งโดยใช้วิธีการก็อปปีมาจากเครื่องที่เคยติดตั้งสำเร็จแล้ว
จะพบว่ามีปัญหาสำคัญที่ทำให้ไม่สามารถก็อปปีมาใช้ได้คือ
·
ชื่อ Alias ของ Private/Public Key ที่อยู่ในไฟล์ Keystore จะตรงกับชื่อเครื่องหรือ IP
Address
ขณะที่ติดตั้ง Identity Provider จะมีการสอบถามชื่อเครื่องหรือ
IP Address ซึ่งตัวติดตั้งจะเอาแอดเดรสนี้ไปตั้งชื่อคีย์ใน Keystore
ให้อัตโนมัติ รวมทั้งเอาแอดเดรสนี้ไปกำหนดใส่ในไฟล์ idp-metadata.xml
และไฟล์ relying-party.xml ด้วย
สำหรับการติดตั้ง Service Provider ปัญหาที่ทำให้เราไม่สามารถก็อปปีไปใช้ที่อีกเครื่องได้
เนื่องจาก
·
ขณะติดตั้งจะนำชื่อเครื่องไปทำเป็นชื่อ
issuer ในไฟล์ Certificate
X509 (ไฟล์ sp-cert.pem)
เพราะฉะนั้นหลังจากติดตั้ง Service Provider เสร็จ
ชื่อเครื่องจะไปติดอยู่ในไฟล์ sp-cert.pem ทำให้เราไม่สามารถนำไปใช้ที่เครื่องคอมพิวเตอร์เครื่องอื่นได้
ดังนั้นข้อแนะนำที่สำคัญก็คือ
ขณะติดตั้ง
ควรใช้ชื่อเครื่อง (Hostname)
และชื่อโดเมน (Domain) แทนการใช้ IP Address เพราะ IP Address อาจจะถูกเปลี่ยนแปลงได้ในอนาคต
ความคิดเห็น
แสดงความคิดเห็น