การติดตั้ง Shibboleth Single Sign-On
ตอนที่ 12 - การทำ SLO (Single Log-out)

19. การติดตั้ง Shibboleth แบบไม่ใช้ SSL

ปัญหาที่เราจะพบในการใช้ SSL คือ ปัจจุบันเราใช้ Self Certificate X509 v3 ในการเข้ารหัสเพื่อทำ SSL ระหว่างตัว SP และ IdP แต่หากนำไปใช้งานกับ Internet Explorer จะพบข้อความแจ้งเตือนทุกครั้งก่อนที่เข้าถึงหน้าจอล็อกอิน เนื่องจาก Internet Explorer ตรวจสอบพบว่า Self Certificate ที่เราใช้งานนี้ไม่ได้รับรองโดย CA (Certificate Authority) ซึ่งหากเราต้องการเลี่ยงข้อความแจ้งเตือนดังกล่าวนี้ เราสามารถทำได้ 2 วิธีคือ
1.    ขอซื้อ Certificate X509 v3 ที่ถูกต้องและได้รับการรับรองจาก CA ที่มีได้รับการเชื่อถือ (Trust) ทางตรง หรือ ทางอ้อมจาก Internet Explorer (ดูที่รายการ Trust Root Certificate ในหน้าต่างปรับแต่งค่า Security ของ Internet Explorer)
2.    ไม่ใช้ SSL ของ Tomcat ทางพอร์ต 8443 และใช้พอร์ต HTTP ปกติที่หมายเลข 8080 แทน
ในที่นี้จะแสดงวิธีการปรับแต่งไฟล์ idp-metadata.xml และ shibboleth2.xml แบบที่เลี่ยงการใช้งาน SSL และใช้พอร์ต HTTP 8080 ตามปกติของ Tomcat

19.1 แก้ไขไฟล์ idp-metadata.xml

ไปที่โฟลเดอร์ c:\sso\shibboleth-idp\metadata แล้วแก้ไขไฟล์ idp-metadata.xml โดยทำดังนี้
·      ค้นหาคำว่า "https://" และเปลี่ยนให้เป็นคำว่า "http://" ให้หมด
·      ค้นหาคำว่า ":8443" และเปลี่ยนให้เป็นคำว่า ":8080" ให้หมด
เมื่อเปลี่ยนแปลง http และ 8080 แล้ว ให้ตรวจทานเนื้อหาไฟล์ idp-metadata.xml โดยเฉพาะบรรทัดที่เกี่ยวกับการ Redirect จาก SP ไปที่ IdP ดังนี้

รูปภาพ 116 บางส่วนของไฟล์ idp-metadata.xml หลังจากเปลี่ยนให้เป็น http: และ 8080
บันทึกไฟล์ idp-metadata.xml ไว้แล้วก็อปปีไปวางที่โฟลเดอร์ etc ของ SP ด้วยให้ตรงกัน

19.2 แก้ไขไฟล์ shibboleth2.xml

เปิดไฟล์ shibboleth2.xml ที่โฟลเดอร์ etc ของตัว SP แล้วแก้ไขดังนี้

รูปภาพ 117 เปลี่ยน homeURL จาก https ให้เป็น http
เสร็จแล้วบันทึกไฟล์ไว้ แก้ไขต่อไปดังนี้

รูปภาพ 118 เปลี่ยน signing="true" ที่ <RelyingParty> ให้เป็น false
บันทึกไฟล์ shibboleth2.xml ไว้แล้วรีสตาทร์ทั้ง Apache, Shibboleth และ Tomcat ใหม่อีกครั้ง ทดลองเข้าไปที่ http://127.0.0.1/app1 จะปรากฏหน้าต่างล็อกอิน โดยที่ไม่ผ่าน SSL และไม่มีข้อความแจ้งเตือนจาก Internet Explorer ดังนี้

รูปภาพ 119 สังเกตว่าไม่ได้ใช้ SSL แล้วโปรโตคอลเป็น http ธรรมดา

20. การทำ Single Logout (SLO)

ในขั้นตอนนี้เราจะปรับแต่งให้ Shibboleth สามารถทำ Single Logout โดยให้ผู้ใช้คลิกที่ลิงค์ แล้ว Logout ออกจากระบบได้

20.1 แก้ไขไฟล์ handler.xml ที่ IdP

เปิดไฟล์ handler.xml ที่ IdP ขึ้นมาเพื่อใส่คอมเมนต์บริเวณ <LoginHandler xsi:type="PreviousSession"> ดังนี้

รูปภาพ 120 ใส่คอมเมนต์ปิดการทำงานของ LoginHandler ที่ใช้เก็บ PreviousSession
 บันทึกไฟล์ handler.xml ไว้ แล้วดำเนินการที่ขั้นตอนต่อไป

20.2 ปิดการทำงานของ SAML2 Logout ที่ไฟล์ shibboleth2.xml

เปิดไฟล์ shibboleth2.xml จากโฟลเดอร์ etc ของ SP แล้วแก้ไขโดยใส่คอมเมนต์ให้กับ <LogoutInitiator> ดังนี้

รูปภาพ 121 ใส่คอมเมนต์ให้กับ LogoutInitiator ที่มี type="SAML2"
เหตุผลที่เราไม่ใช้ SAML2 Logout กับ IdP เนื่องจากปัจจุบัน IdP ของเราไม่สนับสนุน SLO (Single Logout) ตามโปรโตคอล SAML2 แต่อย่างไรก็ตามเราไม่มีความจำเป็นต้องแจ้งให้ IdP ดำเนินการ Logout ก็ได้ เนื่องจากว่าเราไม่ได้เก็บเซสชัน (session) ไว้ที่ IdP
สำหรับ LogoutInitiator ที่เราต้องใช้คือ type="Local" ซึ่งหมายถึงให้เคลียร์ค่าที่เก็บไว้ในเซสชัน (session) ฝั่ง SP ทิ้งให้หมด และหลังจากนั้นให้สลับหน้าเว็บไปที่ตำแหน่ง URL ตามค่าพารามิเตอร์ return ที่ส่งมากับ URL

20.3 สร้างลิงค์สำหรับ Logout ออกจากระบบ

เปิดไฟล์ index.php ใน app1 แล้วเติม <a href> เข้าไปดังนี้

รูปภาพ 122 สังเกตว่าถ้าเราต้องการออกจากระบบ เราจะยิงรีเควสต์ไปที่ /Shibboleth.sso/Logout
บันทึกไฟล์ index.php ไว้ ให้สังเกตว่าเราจะส่งพารามิเตอร์ return=http://127.0.0.1/app1 ซึ่งหมายความว่า หลังจาก SP ล้างค่าเซสชันของผู้ใช้ เสร็จสิ้นการ Logout เรียบร้อยแล้ว ให้ SP ช่วยสลับหน้าไปที่หน้าเว็บ http://127.0.0.1/app1 อีกครั้ง

20.4 ทดสอบกระบวนการ Logout

ให้รีสตาทร์ Apache Web Server, Shibboleth และ Tomcat ใหม่อีกครั้ง หลังจากนั้นเบราซ์ไปที่ตำแหน่ง http://127.0.0.1/app1 เมื่อปรากฏหน้าต่างล็อกอิน ให้ใส่ username และ password เมื่อเข้าไปที่หน้า index.php แล้วจะปรากฏลิงค์สำหรับ Logout อยู่ด้านล่างดังนี้

รูปภาพ 123 ปรากฏลิงค์ Logout ที่เราทำเตรียมไว้
เมื่อผู้ใช้คลิกที่ลิงค์ Logout จะมีรีเควสต์ไปที่ /Shibboleth.sso/Logout และหลังจากเคลียร์เซสชันทิ้งไปแล้ว SP จะพยายามเข้าไปที่หน้า http://127.0.0.1/app1 ซึ่งตรงตามพารามิเตอร์ return ที่เรากำหนดไว้ แต่เนื่องจาก http://127.0.0.1/app1 เองเป็นบริเวณที่ถูกควบคุมโดย Shibboleth จึงถูกส่งต่อไปที่ IdP และปรากฏหน้าล็อกอินใหม่อีกครั้งดังนี้

รูปภาพ 124 ขั้นตอนการทดลอง หลังจาก Logout แล้วลอง Login ใหม่เป็นชื่อผู้ใช้ user2

เมื่อเสร็จสิ้นขั้นตอนนี้เราจะได้ระบบที่สามารถทำ Single Logout ได้ตามต้องการ

ความคิดเห็น

  1. ไม่ระบุชื่อ25 มกราคม 2565 เวลา 04:19

    1xbet korean review & overview, sports betting & sportsbook
    1xbet 메리트카지노 korean review & overview, sports betting & sportsbook. 1xbet korean 1xbet korean review & overview, 샌즈카지노 sports betting & sportsbook. 1xbet korean review & overview,

    ตอบลบ

แสดงความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ตัวอย่างการเข้ารหัส AES ด้วย Java และถอดรหัสด้วย C#.NET

การรักษาความปลอดภัยแบบ OWASP