Score:2

ฉันจะสร้าง Bearer Token สำหรับ cURL เพื่อรับผ่าน IAP (GCP) ได้อย่างไร

ธง us
sts

ฉันต้องการ cURL เว็บแอปที่โฮสต์อยู่เบื้องหลัง IAP บน GCP

โดยปกติ ผู้ใช้จะเข้าสู่ระบบผ่าน IAP และใช้เว็บแอป แต่ฉันต้องเรียกใช้คำสั่ง cURL บางคำสั่ง (แบบโต้ตอบและไม่ใช่แบบโต้ตอบ) ที่กด URL ของเว็บแอป (ตัวอย่างเช่น: https://myapp.com/get_pics/1)

ฉันไม่สามารถหาวิธีรับโทเค็น Bearer จาก GCP ที่ฉันสามารถใช้ในส่วนหัวการให้สิทธิ์สำหรับ cURL

ฉันสามารถตั้งค่าบัญชีบริการด้วยบทบาท "ผู้ใช้ IAP Secured Web App" และฉันมีคีย์ JSON สำหรับบัญชีบริการนี้ แต่ฉันไม่แน่ใจว่าต้องไปที่ไหนหลังจากนั้นเพื่อรับโทเค็น Bearer ที่เหมาะสมซึ่ง IAP จะยอมรับ

Nadia Espinosa avatar
in flag
ฉันคิดว่าข้อมูลเกี่ยวกับ[สร้างการตรวจสอบสิทธิ์](https://cloud.google.com/iap/docs/programmatic-oauth-clients#service_accounts_and_gcloud)มีประโยชน์
John Hanley avatar
cn flag
@NadiaEspinosa - ลิงก์ของคุณมีไว้สำหรับสร้างโทเค็นการเข้าถึง ในคำถามนี้ จำเป็นต้องมีโทเค็นข้อมูลประจำตัว
John Hanley avatar
cn flag
ในกรณีของคุณ คุณต้องมีโทเค็นข้อมูลระบุตัวตน OIDC ข้อมูลระบุตัวตนเป็นผู้ใช้หรือบัญชีบริการหรือไม่ ขณะพัฒนาให้ใช้ CLI เพื่อสร้างโทเค็นนี้: **gcloud auth print-identity-token** https://cloud.google.com/sdk/gcloud/reference/auth/print-identity-token ระบุบริการที่คุณใช้ด้วย กำลังใช้. มีพารามิเตอร์สำหรับ **aud** (--audiences) ซึ่งเป็น URL สำหรับบริการ เคล็ดลับ: ใช้ Python แทน Curl คุณจะสร้างโทเค็น OAuth/OIDC ได้ง่ายขึ้นมาก
sts avatar
us flag
sts
ข้อมูลประจำตัวคือบัญชีบริการโทเค็นมีไว้สำหรับไคลเอนต์ iOS ที่กดปุ่ม REST API หลัง IAP โทเค็นอายุสั้นเป็นสิ่งที่น่าเสียดายเนื่องจากเป็นเพียงการทดสอบกับ API ที่ป้องกันโดย IAP Python ไม่ได้ช่วยอะไรมาก เป็นกรณีการใช้งาน GCP ที่ไม่ได้พิจารณา นักพัฒนาเป็นบุคคลที่สาม ดังนั้นเราจึงไม่ให้ gcloud แก่พวกเขาตามแนวคิดของบัญชีบริการ
Ismael Clemente Aguirre avatar
ye flag
@sts เนื่องจากกรณีนี้เปิดมาได้ 3 เดือนแล้ว เราอยากทราบว่าคุณพบวิธีแก้ปัญหาของคุณหรือไม่
sts avatar
us flag
sts
ไม่. เราถ่อ
Score:1
ธง us

สำหรับ IAP คุณต้องระบุโทเค็นข้อมูลประจำตัว OIDC คุณสามารถใช้ได้ จีคลาวด์ เพื่อสร้างให้คุณหรือใช้วิธีอื่นใดตามที่อธิบายไว้ใน การรับรองความถูกต้องทางโปรแกรม.

ฉันถือว่าคุณมี gcloud ดังนั้นฉันจะแสดงวิธีใช้ให้คุณ:

  1. เข้าสู่ระบบโดยใช้บัญชีบริการ
gcloud รับรองความถูกต้องเปิดใช้งานบัญชีบริการ --key-file service-account-key.json
  1. ส่งคำขอของคุณ
curl -H "การอนุญาต: Bearer $(gcloud auth print-identity-token --audiences="xxx.apps.googleusercontent.com")" https://myapp.com/get_pics/1

ตรวจสอบให้แน่ใจว่าคุณให้สิทธิ์บัญชีบริการ iap.httpsResourceAccessor- อนุญาต มิฉะนั้น คุณจะยังคงถูกปฏิเสธ

  • โบนัส: อย่าใช้ไฟล์คีย์บัญชีบริการ เลียนแบบบัญชีบริการจากโปรไฟล์ผู้ใช้ปัจจุบันของคุณ
curl -H "การให้สิทธิ์: Bearer $(gcloud auth print-identity-token --include-email --audiences="xxx.apps.googleusercontent.com" --impersonate-service-account=service_account@project.iam.gserviceaccount คอม)" https://myapp.com/get_pics/1
Score:1
ธง ye

ฉันไม่สามารถหาวิธีรับโทเค็น Bearer จาก GCP ที่ฉันสามารถใช้ในส่วนหัวการให้สิทธิ์สำหรับ cURL

ตามที่มี เอกสารสาธารณะของ Google

หากแอปพลิเคชันของคุณใช้ส่วนหัวคำขอการให้สิทธิ์ คุณสามารถทำได้ รวมโทเค็น ID ในส่วนหัว Proxy-Authorization: Bearer แทน หากพบโทเค็น ID ที่ถูกต้องในส่วนหัว Proxy-Authorization, IAP อนุญาตคำขอด้วย หลังจากให้สิทธิ์คำขอแล้ว IAP ส่งส่วนหัวการให้สิทธิ์ไปยังแอปพลิเคชันของคุณโดยไม่ต้องดำเนินการใดๆ ในเนื้อหา.

หากไม่พบโทเค็น ID ที่ถูกต้องในส่วนหัว Proxy-Authorization, IAP ประมวลผลส่วนหัวการให้สิทธิ์ต่อไปและตัดส่วน Proxy-Authorization ก่อนส่งคำขอไปยังคุณ แอปพลิเคชัน.

ผู้ถือโทเค็น OIDC

เอกสารนี้ยังมีตัวอย่างโค้ดสำหรับ:

และในลิงค์นี้ คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับ ตรวจสอบ Bearer Token ใน GCP

ผู้ถือโทเค็น Auth

หลังจากการค้นคว้าบางอย่าง ฉันพบหน้าสองหน้าซึ่งอธิบายวิธีการให้การรับรองความถูกต้องของบัญชีบริการของคุณเป็นโทเค็น Bearer และวิธีส่งคำขอ Curl POST ด้วย Bearer Token Authorization Header

อันแรกเป็นส่วนหนึ่งของ เอกสารสาธารณะของ Google Developersและอธิบายกระบวนการที่จะ รับโทเค็นผู้ถือด้วยบัญชีบริการของคุณ

  1. ติดตั้งเครื่องมือบรรทัดคำสั่ง gcloud.

  2. รับรองความถูกต้องกับบัญชีบริการของคุณ ในคำสั่งต่อไปนี้ แทนที่ ${KEY_FILE} ด้วยเส้นทางไปยังรหัสบัญชีบริการของคุณ ไฟล์:

    gcloud auth เปิดใช้งานบัญชีบริการ
    --key-ไฟล์ ${KEY_FILE}
    
  3. ใช้บัญชีบริการของคุณเพื่อรับโทเค็นการให้สิทธิ์:

    gcloud รับรองความถูกต้องโทเค็นการเข้าถึงการพิมพ์ 
    

    คำสั่งส่งคืนค่าโทเค็นการเข้าถึง

เมื่อคุณใช้ API ให้ส่งค่าโทเค็นเป็นโทเค็น Bearer ใน ส่วนหัวการให้สิทธิ์ ดูตัวอย่างต่อไปนี้:

    curl -X GET -H "X-Goog-User-Project: ${CLIENT_PROJECT}" \  
    -H "ประเภทเนื้อหา: แอปพลิเคชัน/json" \  
    -H "การอนุญาต: ผู้ถือ ${TOKEN}" \ 
"https://sasportal.googleapis.com/v1alpha1/customers" 

ชุด ${CLIENT_PROJECT} ไปที่ รหัสของโครงการ Google Cloud จาก ที่คุณทำตามคำขอแล้วตั้งค่า ${โทเค็น} ไปที่ โทเค็นการอนุญาต

และใน ลิงค์นี้ คุณจะพบข้อมูลและตัวอย่างเกี่ยวกับ คำขอ Curl พร้อมส่วนหัวการให้สิทธิ์ Bearer Token

John Hanley avatar
cn flag
โทเค็นมีสองประเภท: โทเค็นการเข้าถึง OAuth และโทเค็นข้อมูลประจำตัว OIDC คำถามเกี่ยวกับ IAP (Identity Aware Proxy) คำตอบของคุณคือสำหรับบริการอื่น IAP ต้องการโทเค็นข้อมูลประจำตัว OIDC
Ismael Clemente Aguirre avatar
ye flag
ขอบคุณสำหรับความคิดเห็น ฉันแก้ไขคำตอบแล้ว

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา