Điểm:2

Làm cách nào để tạo Mã thông báo mang cho cURL để nhận IAP qua IAP (GCP)?

lá cờ us
sts

Tôi cần cURL một ứng dụng web được lưu trữ phía sau IAP trên GCP.

Thông thường, người dùng đăng nhập thông qua IAP và sử dụng ứng dụng web, nhưng tôi cần chạy một số lệnh cURL (tương tác và không tương tác) truy cập vào các URL của ứng dụng web (ví dụ: https://myapp.com/get_pics/1)

Tôi không thể tìm ra cách nhận mã thông báo Bearer từ GCP mà tôi có thể sử dụng trong tiêu đề ủy quyền cho cURL.

Tôi có thể thiết lập tài khoản dịch vụ với vai trò "Người dùng ứng dụng web bảo mật IAP" và tôi có khóa JSON cho tài khoản dịch vụ này, nhưng sau đó tôi không chắc phải đi đâu để nhận mã thông báo Bearer phù hợp mà IAP sẽ chấp nhận.

Nadia Espinosa avatar
lá cờ in
Tôi nghĩ rằng thông tin này về [tạo xác thực](https://cloud.google.com/iap/docs/programmatic-oauth-clients#service_accounts_and_gcloud) có thể hữu ích.
John Hanley avatar
lá cờ cn
@NadiaEspinosa - Liên kết của bạn là để tạo Mã thông báo truy cập. Trong câu hỏi này, cần có Mã thông báo nhận dạng.
John Hanley avatar
lá cờ cn
Trong trường hợp của bạn, bạn cần có Mã nhận dạng OIDC. Danh tính là tài khoản người dùng hay dịch vụ? Trong khi phát triển, hãy sử dụng CLI để tạo mã thông báo này: **gcloud auth print-identity-token** https://cloud.google.com/sdk/gcloud/reference/auth/print-identity-token Đồng thời chỉ định các dịch vụ mà bạn đang sử dụng. Có một tham số cho **aud** (--audiences) là URL của dịch vụ. Mẹo: sử dụng Python thay vì Curl. Bạn sẽ có thời gian tạo mã thông báo OAuth/OIDC dễ dàng hơn nhiều.
sts avatar
lá cờ us
sts
Danh tính là một tài khoản dịch vụ.Mã thông báo dành cho ứng dụng khách iOS truy cập API REST phía sau IAP. Mã thông báo tồn tại trong thời gian ngắn là một điều đáng tiếc vì nó chỉ đang thử nghiệm dựa trên API được bảo vệ bởi IAP. Python không giúp được gì nhiều. Đó là trường hợp sử dụng mà GCP chưa xem xét. Nhà phát triển là bên thứ ba, vì vậy chúng tôi sẽ không cung cấp gcloud cho họ vì ý tưởng tài khoản dịch vụ.
Ismael Clemente Aguirre avatar
lá cờ ye
@sts Vì trường hợp này đã mở được 3 tháng rồi, tôi muốn biết liệu bạn có tìm ra cách giải quyết vấn đề của mình không.
sts avatar
lá cờ us
sts
Không. Chúng tôi đánh cược.
Điểm:1
lá cờ ye

Tôi không thể tìm ra cách nhận mã thông báo Bearer từ GCP mà tôi có thể sử dụng trong tiêu đề ủy quyền cho cURL.

Theo với Tài liệu công khai của Google

Nếu ứng dụng của bạn chiếm tiêu đề yêu cầu Ủy quyền, bạn có thể thay vào đó, hãy bao gồm mã thông báo ID trong tiêu đề Proxy-Authorization: Bearer. Nếu mã thông báo ID hợp lệ được tìm thấy trong tiêu đề Ủy quyền ủy quyền, IAP cho phép yêu cầu với nó. Sau khi cho phép yêu cầu, IAP chuyển tiêu đề Ủy quyền cho ứng dụng của bạn mà không cần xử lý Nội dung.

Nếu không tìm thấy mã thông báo ID hợp lệ nào trong tiêu đề Ủy quyền ủy quyền, IAP tiếp tục xử lý tiêu đề Ủy quyền và loại bỏ Tiêu đề Ủy quyền ủy quyền trước khi chuyển yêu cầu tới đăng kí.

Mã thông báo mang OIDC

Tài liệu này cũng bao gồm các mẫu mã để:

Và trong liên kết này, bạn có thể tìm thêm thông tin về Xác minh mã thông báo mang trong GCP

Xác thực mã thông báo mang

Sau một số nghiên cứu, tôi tìm thấy hai trang mô tả Cách cung cấp xác thực tài khoản dịch vụ của bạn dưới dạng mã thông báo Bearer và Cách gửi yêu cầu POST Curl với Tiêu đề ủy quyền mã thông báo Bearer.

Cái đầu tiên là một phần của Tài liệu công khai của Google Developers, và mô tả quá trình để lấy mã thông báo Bearer bằng tài khoản dịch vụ của bạn.

  1. Cài đặt công cụ dòng lệnh gcloud.

  2. Xác thực tài khoản dịch vụ của bạn. Trong lệnh sau, thay thế ${KEY_FILE} với đường dẫn đến khóa tài khoản dịch vụ của bạn tập tin:

    gcloud auth kích hoạt-dịch vụ-tài khoản
    --key-tệp ${KEY_FILE}
    
  3. Sử dụng tài khoản dịch vụ của bạn để nhận mã thông báo ủy quyền:

    gcloud auth print-access-token 
    

    Lệnh trả về giá trị mã thông báo truy cập.

Khi bạn sử dụng API, hãy chuyển giá trị mã thông báo dưới dạng mã thông báo Bearer trong một Tiêu đề ủy quyền. Xem ví dụ sau:

    curl -X GET -H "Dự án người dùng X-Goog: ${CLIENT_PROJECT}" \  
    -H "Loại nội dung: ứng dụng/json" \  
    -H "Ủy quyền: Người mang ${TOKEN}" \ 
"https://sasportal.googleapis.com/v1alpha1/customers" 

Bộ ${CLIENT_PROJECT} đến ID của Dự án Google Cloud từ mà bạn thực hiện các yêu cầu, sau đó thiết lập ${TOKEN} đến mã thông báo ủy quyền.

Và trong liên kết này bạn sẽ tìm thấy thông tin và ví dụ về Yêu cầu cuộn tròn với tiêu đề ủy quyền mã thông báo mang

John Hanley avatar
lá cờ cn
Có hai loại mã thông báo: Mã thông báo truy cập OAuth và Mã thông báo nhận dạng OIDC. Câu hỏi là về IAP (Identity Aware Proxy), câu trả lời của bạn là dành cho một dịch vụ khác. IAP yêu cầu Mã thông báo nhận dạng OIDC.
Ismael Clemente Aguirre avatar
lá cờ ye
Cảm ơn nhận xét của bạn, tôi đã chỉnh sửa câu trả lời của mình.
Điểm:1
lá cờ us

Đối với IAP, bạn cần cung cấp mã thông báo nhận dạng OIDC. Bạn có thể dùng gcloud để tạo nó cho bạn hoặc sử dụng bất kỳ phương tiện nào khác như được mô tả trong Xác thực có lập trình.

Tôi cho rằng bạn có gcloud, vì vậy tôi sẽ chỉ cho bạn cách sử dụng nó:

  1. Đăng nhập bằng tài khoản dịch vụ
gcloud auth activate-service-account --key-file service-account-key.json
  1. Gửi yêu cầu của bạn
curl -H "Ủy quyền: Bearer $(gcloud auth print-identity-token --audiences="xxx.apps.googleusercontent.com")" https://myapp.com/get_pics/1

Đảm bảo rằng bạn đã cấp cho tài khoản dịch vụ iap.httpsResourceAccessor-permission, hoặc bạn vẫn sẽ bị từ chối.

  • Phần thưởng: Không sử dụng các tệp khóa tài khoản dịch vụ. Mạo danh một tài khoản dịch vụ từ hồ sơ người dùng hiện tại của bạn.
curl -H "Ủy quyền: Bearer $(gcloud auth print-identity-token --include-email --audiences="xxx.apps.googleusercontent.com" --impersonate-service-account=service_account@project.iam.gserviceaccount. com)" https://myapp.com/get_pics/1

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.