การตรวจสอบสิทธิ์ผู้ใช้เว็บแอปมักจําเป็นและมักจะต้องใช้การจัดโปรแกรมพิเศษในแอป คุณมอบหมายความรับผิดชอบเหล่านั้นไปยังบริการ Identity-Aware Proxy สําหรับแอป Google Cloud Platform ได้ หากต้องการเพียงจํากัดการเข้าถึงของผู้ใช้ที่เลือก ก็ไม่จําเป็นต้องเปลี่ยนแปลงแอปพลิเคชัน หากแอปพลิเคชันจําเป็นต้องรู้ข้อมูลประจําตัวของผู้ใช้ (เช่น สําหรับการรักษาค่ากําหนดฝั่งเซิร์ฟเวอร์ของผู้ใช้) พร็อกซีแบบ Aware-Aware สามารถมอบรหัสแอปพลิเคชันเพียงเล็กน้อยได้
Identity-Aware Proxy คืออะไร
Identity-Aware Proxy (IAP) เป็นบริการของ Google Cloud Platform ที่สกัดกั้นคําขอเว็บที่ส่งไปยังแอปพลิเคชันของคุณ ตรวจสอบสิทธิ์ผู้ใช้ที่ส่งคําขอโดยใช้บริการ Google Identity และอนุญาตคําขอผ่านคําขอที่มาจากผู้ใช้ที่คุณให้สิทธิ์เท่านั้น นอกจากนี้ยังแก้ไขส่วนหัวของคําขอให้รวมข้อมูลเกี่ยวกับผู้ใช้ที่ตรวจสอบสิทธิ์ได้ด้วย
Codelab นี้จะแนะนําวิธีสร้างแอปพลิเคชันของตนเอง รวมถึงการจํากัดการเข้าถึง และการใช้ข้อมูลระบุตัวตนของผู้ใช้จาก IAP
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะต้องสร้างเว็บแอปพลิเคชันขั้นต่ําด้วย Google App Engine แล้วสํารวจวิธีต่างๆ ในการใช้ Identity-Aware Proxy เพื่อจํากัดการเข้าถึงแอปพลิเคชันและให้ข้อมูลข้อมูลประจําตัวของผู้ใช้แก่แอปพลิเคชัน แอปจะทําสิ่งต่อไปนี้
|
สิ่งที่จะได้เรียนรู้
- วิธีเขียนและทําให้แอป App Engine เรียบง่ายใช้งานได้โดยใช้ Python 3.7
- วิธีเปิดและปิด IAP เพื่อจํากัดการเข้าถึงแอป
- วิธีรับข้อมูลประจําตัวของผู้ใช้จาก IAP ในแอปของคุณ
- วิธียืนยันข้อมูลจาก IAP มีการเข้ารหัสเพื่อป้องกันการปลอมแปลง
สิ่งที่ต้องมี
- เว็บเบราว์เซอร์รุ่นใหม่อย่าง Chrome
- ความรู้เบื้องต้นเกี่ยวกับภาษาโปรแกรม Python
Codelab นี้มุ่งเน้นที่ Google App Engine และ IAP แนวคิดที่ไม่มีความเกี่ยวข้องและการบล็อกโค้ดจะไม่เพียงพอ และคุณก็มีหน้าที่คัดลอกและวางเท่านั้น
คุณจะทํางานในสภาพแวดล้อมบรรทัดคําสั่ง Cloud Shell เริ่มด้วยการเปิดสภาพแวดล้อมนั้นและดึงโค้ดตัวอย่างไปยังสภาพแวดล้อม
เปิดตัวคอนโซลและ Cloud Shell
คลิกปุ่มเปิด Google Console ที่ด้านซ้ายบนของหน้าห้องทดลอง คุณจะต้องลงชื่อเข้าสู่ระบบด้วยชื่อผู้ใช้และรหัสผ่านที่แสดงด้านล่างปุ่มดังกล่าว |
ระบบจะเรียกใช้คําสั่งทั้งหมดใน Codelab นี้ภายใน Cloud Shell สําหรับโปรเจ็กต์ที่สร้างและเปิดให้คุณ เปิด Cloud Shell โดยคลิกไอคอนเปิดใช้งาน Cloud Shell ที่ด้านขวาของส่วนหัวของหน้าคอนโซล ครึ่งล่างของหน้าจะช่วยให้คุณป้อนและเรียกใช้คําสั่งได้ คุณสามารถเรียกใช้คําสั่งได้จากพีซีของคุณเอง แต่คุณจะต้องติดตั้งและกําหนดค่าซอฟต์แวร์การพัฒนาที่จําเป็นก่อน Cloud Shell มีเครื่องมือซอฟต์แวร์ทั้งหมดที่คุณต้องการอยู่แล้ว |
ดาวน์โหลดโค้ด
คลิกพื้นที่บรรทัดคําสั่งใน Cloud Shell เพื่อให้คุณพิมพ์คําสั่งได้ ดึงโค้ดจาก GitHub แล้วเปลี่ยนไปยังโฟลเดอร์โค้ด โดยทําดังนี้
git clone https://github.com/googlecodelabs/user-authentication-with-iap.git
cd iap-codelab
โฟลเดอร์นี้มีโฟลเดอร์ย่อย 1 โฟลเดอร์สําหรับแต่ละขั้นตอนของ Codelab นี้ คุณจะเปลี่ยนไปใช้โฟลเดอร์ที่ถูกต้องเพื่อดําเนินการแต่ละขั้นตอน
นี่คือแอปพลิเคชัน App Engine Standard ที่เขียนขึ้นใน Python 3.7 ที่แสดงเพียงหน้า "Hi, World" ต้อนรับ เราจะติดตั้งใช้งานและทดลอง จากนั้นจํากัดการเข้าถึงโดยใช้ IAP
ตรวจสอบรหัสแอปพลิเคชัน
เปลี่ยนจากโฟลเดอร์โครงการหลักเป็นโฟลเดอร์ย่อย 1-HelloWorld
ที่มีโค้ดสําหรับขั้นตอนนี้
cd 1-HelloWorld
รหัสแอปพลิเคชันจะอยู่ในไฟล์ main.py
โดยจะใช้เฟรมเวิร์กเว็บ Flask เพื่อตอบกลับคําขอเว็บด้วยเนื้อหาของเทมเพลต ไฟล์เทมเพลตนั้นอยู่ใน templates/index.html
และในขั้นตอนนี้มีเฉพาะ HTML ธรรมดาเท่านั้น ไฟล์เทมเพลตที่ 2 มีนโยบายความเป็นส่วนตัวของตัวอย่างโครงใน templates/privacy.html
มีไฟล์อื่นอีก 2 ไฟล์ ได้แก่ requirements.txt
แสดงรายการไลบรารี Python ที่ไม่ใช่ค่าเริ่มต้นทั้งหมดที่แอปพลิเคชันใช้ และ app.yaml
จะบอก Google Cloud Platform ว่านี่เป็นแอปพลิเคชัน App Engine ของ Python 3.7
คุณจะแสดงแต่ละไฟล์ใน Shell ได้โดยใช้คําสั่ง cat ดังตัวอย่างต่อไปนี้
cat main.py
หรือจะเปิดตัวแก้ไขโค้ด Cloud Shell โดยคลิกไอคอนดินสอที่ด้านขวาบนของหน้าต่าง Cloud Shell และตรวจสอบโค้ดด้วยวิธีนี้
คุณไม่จําเป็นต้องเปลี่ยนไฟล์ใดๆ ในขั้นตอนนี้
ทําให้ใช้งานได้ใน App Engine
ทําให้แอปใช้งานได้ในสภาพแวดล้อม App Engine Standard สําหรับ Python 3.7 แล้ว
gcloud app deploy
ระบบอาจขอให้คุณเลือกภูมิภาคที่จะทําให้ใช้งานได้ เลือกผู้ให้บริการที่อยู่ใกล้คุณโดยระบุว่า "รองรับมาตรฐาน" เมื่อระบบถามว่าคุณต้องการดําเนินการต่อหรือไม่ ให้ป้อน Y
สําหรับใช่
ภายในไม่กี่นาที การติดตั้งใช้งานควรเสร็จสมบูรณ์ และคุณจะเห็นข้อความว่าคุณสามารถดูแอปพลิเคชันของคุณด้วย gcloud app browse
ป้อนคําสั่งนั้น หากแท็บใหม่ไม่เปิดขึ้นในเบราว์เซอร์ ให้คลิกลิงก์ที่แสดงอยู่เพื่อเปิดแท็บใหม่ในแท็บใหม่ หรือคัดลอกไปยังแท็บใหม่ที่เปิดขึ้นด้วยตนเอง หากจําเป็น เนื่องจากนี่เป็นครั้งแรกที่แอปนี้ทํางาน ระบบจึงอาจต้องใช้เวลา 2-3 วินาทีจึงจะปรากฏในอินสแตนซ์อินสแตนซ์ระบบคลาวด์ และคุณจะเห็นหน้าต่างต่อไปนี้
คุณเปิด URL เดียวกันนี้จากคอมพิวเตอร์เครื่องใดก็ได้ที่เชื่อมต่อกับอินเทอร์เน็ตเพื่อดูหน้าเว็บดังกล่าว ยังจํากัดการเข้าถึงอยู่
จํากัดการเข้าถึงด้วย IAP
ในหน้าต่าง Cloud Console ให้คลิกไอคอนเมนูที่ด้านซ้ายบนของหน้า แล้วคลิก "ความปลอดภัย" จากนั้นคลิก "Identity-Aware Proxy" | |
เนื่องจากนี่เป็นครั้งแรกที่คุณเปิดใช้ตัวเลือกการตรวจสอบสิทธิ์สําหรับโปรเจ็กต์นี้ คุณจะเห็นข้อความที่คุณต้องกําหนดค่าหน้าจอคํายินยอม OAuth ก่อนจึงจะใช้ IAP ได้ | |
คลิกปุ่ม "กําหนดค่าการกําหนดค่า" แท็บใหม่จะเปิดขึ้นเพื่อกําหนดค่าหน้าจอคํายินยอม |
กรอกข้อมูลในช่องว่างที่ต้องระบุด้วยค่าที่เหมาะสม
ชื่อแอปพลิเคชัน | ตัวอย่าง IAP |
อีเมลทีมสนับสนุน | อีเมลของคุณอาจถูกเติมไว้ให้แล้ว |
โดเมนที่ได้รับอนุญาต | ส่วนชื่อโฮสต์ของ URL แอปพลิเคชัน เช่น iap-example-999999.appspot.com ซึ่งดูได้ในแถบที่อยู่ของหน้าเว็บ Hello World ที่เปิดไว้ก่อนหน้านี้ อย่าใส่ คุณต้องกด Enter หลังจากกรอกค่านี้ |
ลิงก์หน้าแรกของแอปพลิเคชัน | URL ที่คุณใช้ดูแอป |
ลิงก์นโยบายความเป็นส่วนตัวของแอปพลิเคชัน | ลิงก์หน้าความเป็นส่วนตัวในแอป เช่นเดียวกันกับลิงก์หน้าแรกที่เพิ่ม /privacy ต่อท้าย |
คลิกบันทึก ระบบจะแจ้งให้คุณสร้างข้อมูลรับรอง คุณไม่จําเป็นต้องสร้างข้อมูลเข้าสู่ระบบสําหรับ Codelab จึงจะปิดแท็บเบราว์เซอร์นี้ได้
กลับไปที่หน้าพร็อกซี Identity-Aware แล้วรีเฟรช คุณจะเห็นรายการทรัพยากรที่คุณสามารถปกป้องได้แล้ว คลิกปุ่มสลับในคอลัมน์ IAP ในแถวแอป App Engine เพื่อเปิด IAP | |
คุณจะเห็นชื่อโดเมนที่ IAP ได้รับการปกป้อง คลิก "เปิด" | |
จากนั้นเปิดแท็บเบราว์เซอร์แล้วไปที่ URL ของแอป คุณจะเห็นหน้าจอลงชื่อเข้าใช้ด้วย Google ที่กําหนดให้คุณต้องลงชื่อเข้าสู่ระบบเพื่อเข้าถึงแอป | |
ลงชื่อเข้าใช้ด้วยบัญชี Google หรือ G Suite คุณจะเห็นหน้าจอปฏิเสธสิทธิ์เข้าถึง |
คุณปกป้องแอปด้วย IAP เรียบร้อยแล้ว แต่คุณยังไม่ได้แจ้งให้ IAP ทราบว่าจะต้องอนุญาตบัญชีใด
กลับไปที่หน้า Identity-Aware Proxy ของคอนโซล เลือกช่องทําเครื่องหมายถัดจากแอป App Engine และดูแถบด้านข้างที่ด้านขวาของหน้า | |
คุณต้องเพิ่มอีเมล (หรือที่อยู่ของกลุ่ม Google หรือชื่อโดเมน G Suite) แต่ละรายการที่ควรได้รับอนุญาตให้เข้าถึงเป็นสมาชิก คลิกเพิ่มสมาชิก ป้อนอีเมล แล้วเลือกบทบาท Cloud IAP/IAP-Secured Web App เพื่อมอบหมายให้กับอีเมลดังกล่าว คุณจะป้อนที่อยู่หรือโดเมน G Suite เพิ่มเติมในลักษณะเดียวกันได้ |
คลิกบันทึก ข้อความ "PolicyUpdate" จะปรากฏที่ด้านล่างของหน้าต่าง
กลับไปที่แอป แล้วโหลดหน้านี้ซ้ํา ตอนนี้คุณควรเห็นเว็บแอปแล้ว เนื่องจากคุณลงชื่อเข้าสู่ระบบด้วยผู้ใช้ที่ได้รับสิทธิ์ อย่างไรก็ตาม คุณอาจยังเห็นหน้า "คุณไม่มีสิทธิ์เข้าถึง" เนื่องจาก IAP อาจตรวจสอบการให้สิทธิ์ของคุณอีกครั้งไม่ได้ ในกรณีดังกล่าว ให้ทําตามขั้นตอนต่อไปนี้
- เปิดเว็บเบราว์เซอร์ไปยังที่อยู่หน้าแรกโดยเพิ่ม
/_gcp_iap/clear_login_cookie
ต่อท้าย URL เช่น ในhttps://iap-example-999999.appspot.com/_gcp_iap/clear_login_cookie
- คุณจะเห็นหน้าจอลงชื่อเข้าใช้ด้วย Google ใหม่ พร้อมกับบัญชีของคุณแสดงอยู่ โปรดอย่าคลิกบัญชี แต่ให้คลิก "ใช้บัญชีอื่น" แล้วป้อนข้อมูลเข้าสู่ระบบอีกครั้ง
- ขั้นตอนเหล่านี้จะทําให้ IAP ตรวจสอบการเข้าถึงของคุณอีกครั้ง และคุณควรเห็นหน้าจอหลักของแอปพลิเคชัน
หากคุณมีสิทธิ์เข้าถึงเบราว์เซอร์อื่นหรือสามารถใช้โหมดไม่ระบุตัวตนในเบราว์เซอร์และมีบัญชี GMail หรือ G Suite อื่นที่ถูกต้อง คุณสามารถใช้เบราว์เซอร์นั้นเพื่อไปยังหน้าแอป แล้วลงชื่อเข้าสู่ระบบด้วยบัญชีอื่น เนื่องจากไม่มีการให้สิทธิ์ บัญชีนี้จะเห็นหน้าจอ "คุณเข้าถึงไม่ได้&" แทนแอปของคุณ
เมื่อปกป้องแอปด้วย IAP แล้ว แอปสามารถใช้ข้อมูลระบุตัวตนที่ IAP มีให้ในส่วนหัวของคําขอเว็บที่แอปผ่าน ในขั้นตอนนี้ แอปพลิเคชันจะได้รับที่อยู่อีเมลที่ลงชื่อเข้าสู่ระบบและรหัสผู้ใช้ที่ไม่ซ้ํากันซึ่งบริการ Google Identity กําหนดให้กับผู้ใช้ดังกล่าวอย่างถาวร โดยข้อมูลดังกล่าวจะแสดงให้ผู้ใช้เห็นในหน้าต้อนรับ
นี่คือขั้นตอนที่ 2 และขั้นตอนสุดท้ายลงท้ายด้วย Cloud Shell ที่เปิดในโฟลเดอร์ iap-codelab/1-HelloWorld
ย้ายไปยังโฟลเดอร์ของขั้นตอนนี้:
cd ~/iap-codelab/2-HelloUser
ทำให้ใช้งานได้กับ App Engine
เนื่องจากการทําให้ใช้งานได้จะใช้เวลา 2-3 นาที ให้เริ่มจากการทําให้แอปใช้งานได้ในสภาพแวดล้อมของระบบ App Engine Standard สําหรับ Python 3.7 โดยทําดังนี้
gcloud app deploy
เมื่อระบบถามว่าต้องการดําเนินการต่อไหม ให้ป้อน Y ว่าใช่ การทําให้การติดตั้งใช้งานเสร็จสมบูรณ์ภายในไม่กี่นาที ระหว่างที่รอ คุณสามารถตรวจสอบไฟล์แอปพลิเคชันตามที่อธิบายด้านล่าง
เมื่อการติดตั้งใช้งานพร้อมแล้ว คุณจะเห็นข้อความว่าแอปพลิเคชันของคุณดู gcloud app browse
ได้ ป้อนคําสั่งนั้น หากแท็บใหม่ไม่เปิดขึ้นในเบราว์เซอร์ ให้คัดลอกลิงก์ที่แสดงแล้วเปิดแท็บใหม่ในแท็บใหม่ตามปกติ คุณควรจะเห็นหน้าที่คล้ายกับข้อมูลต่อไปนี้
คุณอาจต้องรอสักครู่เพื่อให้แอปพลิเคชันเวอร์ชันใหม่แทนที่เวอร์ชันก่อนหน้า รีเฟรชหน้าเว็บหากจําเป็นเพื่อดูหน้าที่คล้ายกับด้านบน
ตรวจสอบไฟล์แอปพลิเคชัน
โฟลเดอร์นี้มีชุดไฟล์เหมือนกับที่เห็นในขั้นตอนที่ 1 แต่มีการเปลี่ยนแปลงทั้ง 2 ไฟล์คือ main.py
และ templates/index.html
โปรแกรมนี้มีการเปลี่ยนแปลงเพื่อเรียกข้อมูลผู้ใช้ที่ IAP ให้ไว้ในส่วนหัวของคําขอ และเทมเพลตก็จะแสดงข้อมูลดังกล่าว
ข้อมูลใน main.py
ที่ได้รับข้อมูลระบุตัวตนที่ IAP ให้ไว้มี 2 บรรทัด ดังนี้
user_email = request.headers.get('X-Goog-Authenticated-User-Email')
user_id = request.headers.get('X-Goog-Authenticated-User-ID')
ส่วนหัว X-Goog-Authenticated-User-
มีไว้สําหรับ IAP และระบบจะไม่คํานึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ดังนั้นระบบสามารถระบุส่วนหัวให้ตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ทั้งหมดได้หากต้องการ ตอนนี้คําสั่ง display_template มีค่าเหล่านั้นเพื่อให้แสดงค่าได้ดังนี้
page = render_template('index.html', email=user_email, id=user_id)
เทมเพลต index.html สามารถแสดงค่าเหล่านั้นโดยใส่ชื่อไว้ในวงเล็บปีกกา 2 เท่า:
Hello, {{ email }}! Your persistent ID is {{ id }}.
ตามที่เห็น ข้อมูลที่ระบุจะมีคํานําหน้าเป็น accounts.google.com
ซึ่งจะแสดงให้เห็นว่าข้อมูลนั้นมาจากที่ใด แอปพลิเคชันของคุณอาจนําทุกอย่างออกและรวมเครื่องหมายทวิภาคเพื่อรับค่าดิบได้ ถ้าต้องการ
ปิด IAP
จะเกิดอะไรขึ้นกับแอปนี้ หากมีการปิดใช้ IAP หรือถูกข้ามไปบ้าง (เช่น โดยแอปพลิเคชันอื่นๆ ที่ทํางานอยู่ในโปรเจ็กต์ระบบคลาวด์เดียวกัน) ปิด IAP เพื่อดู
ในหน้าต่าง Cloud Console ให้คลิกไอคอนเมนูที่ด้านซ้ายบนของหน้า แล้วคลิก "ความปลอดภัย" จากนั้นคลิก "Identity-Aware Proxy" คลิกสวิตช์สลับ IAP ถัดจากแอป App Engine เพื่อปิด IAP |
คุณจะได้รับคําเตือนว่าการดําเนินการนี้จะอนุญาตให้ผู้ใช้ทุกคนเข้าถึงแอปได้
รีเฟรชหน้าเว็บแอปพลิเคชัน คุณควรจะเห็นหน้าเดียวกันนี้ แต่ไม่มีข้อมูลผู้ใช้ โดยทําดังนี้
เนื่องจากตอนนี้แอปพลิเคชันไม่ได้ได้รับการปกป้อง ผู้ใช้จะส่งคําขอผ่านเว็บที่ดูเหมือนผ่าน IAP ได้ เช่น คุณสามารถเรียกใช้คําสั่ง curl ต่อไปนี้จาก Cloud Shell เพื่อดําเนินการดังกล่าว (แทนที่ <your-url-here> ด้วย URL ที่ถูกต้องสําหรับแอป)
curl -X GET <your-url-here> -H "X-Goog-Authenticated-User-Email: totally fake email"
หน้าเว็บจะปรากฏในบรรทัดคําสั่งและมีลักษณะดังนี้
<!doctype html> <html> <head> <title>IAP Hello User</title> </head> <body> <h1>Hello World</h1> <p> Hello, totally fake email! Your persistent ID is None. </p> <p> This is step 2 of the <em>User Authentication with IAP</em> codelab. </p> </body> </html>
ไม่มีวิธีที่แอปพลิเคชันจะทราบว่า IAP ถูกปิดใช้หรือข้ามไป ในกรณีที่มีความเสี่ยงที่อาจเกิดขึ้น ขั้นตอนที่ 3 จะแสดงวิธีแก้ไข
หากเสี่ยงต่อการปิดหรือข้าม IAP แอปของคุณสามารถตรวจสอบได้ว่าข้อมูลระบุตัวตนที่ได้รับนั้นถูกต้อง การดําเนินการนี้ใช้ส่วนหัวของคําขอเว็บที่ 3 ซึ่งเพิ่มโดย IAP ซึ่งเรียกว่า X-Goog-IAP-JWT-Assertion
ค่าของส่วนหัวเป็นออบเจ็กต์ที่มีการเข้ารหัสซึ่งมีการเข้ารหัสข้อมูลระบุตัวตนของผู้ใช้ด้วย แอปพลิเคชันของคุณจะยืนยันลายเซ็นดิจิทัลได้และจะใช้ข้อมูลที่ให้ไว้ในออบเจ็กต์นี้ เพื่อให้แน่ใจว่าได้มาจาก IAP โดยไม่ทําการเปลี่ยนแปลงใดๆ
การยืนยันลายเซ็นดิจิทัลจะมีขั้นตอนเพิ่มเติมหลายอย่าง เช่น การเรียกข้อมูลคีย์สาธารณะชุดล่าสุดของ Google คุณเลือกได้ว่าจะให้แอปพลิเคชันดําเนินการตามขั้นตอนเพิ่มเติมเหล่านี้หรือไม่ โดยอิงตามความเสี่ยงที่อาจปิดหรือข้าม IAP ได้ และความละเอียดอ่อนของแอป
นี่คือขั้นตอนที่ 3 และขั้นตอนสุดท้ายลงท้ายด้วย Cloud Shell ที่เปิดในโฟลเดอร์ iap-codelab/2-HelloUser
ย้ายไปยังโฟลเดอร์ของขั้นตอนนี้:
cd ~/iap-codelab/3-HelloVerifiedUser
ทําให้ใช้งานได้ใน App Engine
ทําให้แอปใช้งานได้ในสภาพแวดล้อม App Engine Standard สําหรับ Python 3.7 โดยทําดังนี้
gcloud app deploy
เมื่อระบบถามว่าต้องการดําเนินการต่อไหม ให้ป้อน Y ว่าใช่ การทําให้การติดตั้งใช้งานเสร็จสมบูรณ์ภายในไม่กี่นาที ระหว่างที่รอ คุณสามารถตรวจสอบไฟล์แอปพลิเคชันตามที่อธิบายด้านล่าง
เมื่อการติดตั้งใช้งานพร้อมแล้ว คุณจะเห็นข้อความว่าแอปพลิเคชันของคุณดู gcloud app browse
ได้ ป้อนคําสั่งนั้น หากแท็บใหม่ไม่เปิดขึ้นในเบราว์เซอร์ ให้คัดลอกลิงก์ที่แสดงแล้วเปิดแท็บใหม่ในแท็บใหม่ตามปกติ
ระบุว่าคุณปิดใช้ IAP ในขั้นตอนที่ 2 จึงไม่มีข้อมูล IAP ให้กับแอปพลิเคชัน คุณควรจะเห็นหน้าที่คล้ายกับข้อมูลต่อไปนี้
เช่นเคย คุณอาจต้องรอสักครู่เพื่อให้ระบบแสดงเวอร์ชันล่าสุดเวอร์ชันใหม่
เนื่องจาก IAP ถูกปิดใช้ จึงไม่มีข้อมูลผู้ใช้ ตอนนี้เปิด IAP อีกครั้ง
ในหน้าต่าง Cloud Console ให้คลิกไอคอนเมนูที่ด้านซ้ายบนของหน้า แล้วคลิก "ความปลอดภัย" จากนั้นคลิก "Identity-Aware Proxy" คลิกสวิตช์สลับ IAP ถัดจากแอป App Engine เพื่อเปิด IAP อีกครั้ง |
รีเฟรชหน้าเว็บ หน้าเว็บควรมีลักษณะเช่นนี้
โปรดทราบว่าอีเมลที่ระบุในวิธีที่ยืนยันแล้วไม่มีคํานําหน้า accounts.google.com:
หากปิดหรือข้าม IAP ข้อมูลที่ยืนยันแล้วอาจขาดหายไปหรือไม่ถูกต้อง เนื่องจากไม่มีลายเซ็นที่ถูกต้อง เว้นแต่จะสร้างโดยเจ้าของคีย์ส่วนตัวของ Google
ตรวจสอบไฟล์แอปพลิเคชัน
โฟลเดอร์นี้มีชุดไฟล์เดียวกับที่เห็นในขั้นตอนที่ 2 โดยทั้ง 2 ไฟล์มีการเปลี่ยนแปลงและไฟล์ใหม่ 1 ไฟล์ ไฟล์ใหม่คือ auth.py
ซึ่งให้วิธีการของ user()
ในการดึงข้อมูลและยืนยันข้อมูลระบุตัวตนที่เข้ารหัสแบบเข้ารหัส ไฟล์ที่มีการเปลี่ยนแปลงคือ main.py
และ templates/index.html
ซึ่งตอนนี้ใช้ผลลัพธ์ของเมธอดนั้น ส่วนหัวที่ไม่ได้รับการยืนยันที่พบในขั้นตอนที่ 2 จะแสดงเพื่อเปรียบเทียบด้วย
ฟังก์ชันใหม่อยู่ในฟังก์ชันของ user()
เป็นหลักเป็นหลัก
def user():
assertion = request.headers.get('X-Goog-IAP-JWT-Assertion')
if assertion is None:
return None, None
info = jwt.decode(
assertion,
keys(),
algorithms=['ES256'],
audience=audience()
)
return info['email'], info['sub']
assertion
คือข้อมูลที่ลงชื่อแบบเข้ารหัสซึ่งมีอยู่ในส่วนหัวของคําขอที่ระบุ โค้ดดังกล่าวจะใช้ไลบรารีเพื่อตรวจสอบและถอดรหัสข้อมูลดังกล่าว การตรวจสอบใช้คีย์สาธารณะที่ Google จัดเตรียมไว้สําหรับตรวจสอบข้อมูลที่ลงนาม และการติดตามกลุ่มเป้าหมายว่ามีการเตรียมข้อมูลไว้ให้ (กล่าวคือ โปรเจ็กต์ Google Cloud ที่ได้รับการคุ้มครอง) ฟังก์ชันตัวช่วย keys()
และ audience()
จะรวบรวมและแสดงผลค่าเหล่านั้น
ออบเจ็กต์ที่ลงชื่อมีข้อมูล 2 ประเภทที่เราต้องการ ได้แก่ อีเมลที่ยืนยันแล้วและค่ารหัสที่ไม่ซ้ํากัน (อยู่ในช่อง sub
สําหรับผู้ติดตาม และช่องมาตรฐาน)
ทําขั้นตอนที่ 3 ให้เสร็จสมบูรณ์
คุณทําให้เว็บแอปพลิเคชันของ App Engine ใช้งานได้ ในขั้นตอนที่ 1 คุณจํากัดการเข้าถึงแอปพลิเคชันให้เฉพาะผู้ใช้ที่เลือกไว้เท่านั้น ในขั้นตอนที่ 2 คุณได้ดึงข้อมูลและแสดงข้อมูลประจําตัวของผู้ใช้ที่ IAP อนุญาตให้เข้าถึงแอปพลิเคชันของคุณ และดูว่าข้อมูลถูกปลอมแปลงอย่างไรหากมีการปิดใช้หรือข้าม IAP ในขั้นตอนที่ 3 คุณได้ยืนยันข้อมูลประจําตัวที่ลงนามแบบเข้ารหัสลับของผู้ใช้แล้ว ซึ่งไม่สามารถปลอมแปลงได้
ทรัพยากรเดียวของ Google Cloud Platform ที่คุณใช้ใน Codelab นี้คืออินสแตนซ์ของ App Engine ทุกครั้งที่คุณนําแอปไปใช้งาน ระบบจะสร้างเวอร์ชันใหม่และจะยังคงอยู่จนกว่าจะลบออก ออกจากห้องทดลองเพื่อลบโครงการและทรัพยากรทั้งหมดภายในโครงการ