5

Tôi đang làm việc trên cổng triển khai API AWS với phụ trợ Lambda. Tôi sử dụng tích hợp API Gateway với Cognito Userpools (khá mới) thay vì xây dựng một trình ủy quyền tùy chỉnh sử dụng Lambda (đây là cách được khuyến nghị trước khi nó được tích hợp).Cổng API AWS/Cognito Người dùng chung/Lambdas không thể chuyển thông tin người gọi

Tôi đã tạo bằng chứng khái niệm (javascript) xác thực người dùng với Cognito và sau đó thực hiện cuộc gọi đến API Gateway bằng các thông tin đăng nhập đó. Vì vậy, về cơ bản, lời gọi kết thúc đến API Gateway là với mã thông báo JWT mà tôi nhận được từ Cognito (result.idToken.jwtToken) trong tiêu đề Cấp phép. Điều này tất cả các công trình và tôi có thể xác nhận rằng chỉ với mã thông báo này, bạn có thể truy cập vào API.

Tất cả hoạt động tốt, nhưng bây giờ tôi muốn có quyền truy cập vào danh tính Cognito trong Lambda của tôi; ví dụ id nhận dạng hoặc tên hoặc email. Tôi đã đọc cách ánh xạ tất cả các tham số, nhưng tôi thực sự chỉ sử dụng mẫu tiêu chuẩn 'Yêu cầu phương thức Passthrough' trong yêu cầu tích hợp. Tôi đăng nhập tất cả các tham số trong lambda và tất cả các tham số 'cognito' đều trống.

Tôi đã xem xét nhiều câu hỏi tương tự và tất cả đều đề xuất bật hộp kiểm 'Gọi bằng thông tin xác thực người gọi' trên yêu cầu tích hợp. Điều đó có ý nghĩa hoàn hảo.

Tuy nhiên, hộp kiểm này chỉ có thể được kích hoạt nếu bạn đang sử dụng AWS_IAM như uỷ quyền và không nếu bạn đã chọn cognito bạn UserPool. Vì vậy, nó chỉ là không thể chọn nó và thực sự bị vô hiệu hóa.

Có ai biết phải làm gì trong trường hợp này không? Điều này vẫn còn làm việc trong tiến trình, hoặc là có một lý do tại sao bạn không thể kích hoạt này và nhận được các thông tin nhận dạng cognito trong Lambda của bạn?

Rất cám ơn.

+0

bạn có thể chia sẻ trường hợp sử dụng của bạn mà bạn cần các thông tin người gọi từ Cognito UserPool vì bạn có thể truy cập vào việc xác định người sử dụng chủ yếu trong chức năng Lambda của bạn? –

+0

Chắc chắn; chúng tôi cần đăng nhập/lưu trữ một số thông tin về người dùng nào đã truy cập vào dữ liệu nào (cộng thêm một số thông tin khác) để báo cáo. Đối với điều này, chúng tôi cần thêm một số thông tin người dùng. Tôi hy vọng điều này sẽ được gửi đi, bởi vì trong mẫu 'Yêu cầu phương thức chuyển tiếp', một số trường cognito được ánh xạ rõ ràng ('cognito-authentication-provider', 'cognito-authentication-type', 'cognito-identity-id' , 'cognito-identity-pool-id' Nhưng tất cả chúng đều trống rỗng khi lambda đạt được. Ngoài ra, tôi đã kiểm tra 'authorizer-principal-id' cũng trống. Bất kỳ đề xuất nào? – evdh

+0

Bạn có thể truy cập vào "sub" hoặc "email" bởi "$ context.authorizer.claims.sub", "$ context.authorizer.claims.email" –

Trả lời

2

Nếu bạn cần phải đăng nhập thông tin người dùng trong phụ trợ của bạn, bạn có thể sử dụng $context.authorizer.claims.sub$context.authorizer.claims.email để có được những phụemail cho hồ bơi sử dụng Cognito của bạn.

Dưới đây là tài liệu về Use Amazon Cognito Your User Pool trong API Gateway

+1

Tôi cố gắng này nhưng tôi nhận được giá trị trống trên backend: { "bối cảnh": { "phụ": "", "email": "" }} – Tejas

+0

@Ka Hou Ieong, là nó vẫn cập nhật câu trả lời? Trong những ngày gần đây, tôi đã tìm thấy một số câu trả lời giống như bình luận của bạn được thêm vào trong những ngày cuối cùng mà các 'claim' và' $ context' này trống. – nicq

Các vấn đề liên quan