8

Tôi đã xem xét thiết lập đăng nhập cho ứng dụng web cho phép khách hàng xem dữ liệu được lưu trữ trong S3 và nhận thấy rằng AWS Cognito có giao diện người dùng web được lưu trữ [link] xử lý hầu hết luồng xác thực cho tôi Tôi đang phải đối mặt là tôi không thể tìm hiểu làm thế nào để tích hợp đầu ra của giao diện người dùng web vào ứng dụng của tôi. Hầu hết tài liệu hiện có trong Cognito chỉ tham chiếu cách sử dụng các API khác nhau trong việc tạo giao diện người dùng của riêng bạn, điều này khiến tôi có câu trả lời khó hiểu cho vấn đề của mình.Giao diện người dùng được lưu trữ trên Cognito

Có thông tin nào đã được tạo bằng giao diện người dùng được lưu trữ trên Cognito không?

Amazon nói rằng bạn có thể tích hợp thông tin đăng nhập được xác thực với Cognito trong vài phút nhưng tôi đã xem xét điều này trong một vài tuần và không thể tìm ra được.

+0

Bạn có liên kết đến bất kỳ chi tiết nào liên quan đến giao diện người dùng được lưu trữ không? – BryceH

+0

@BryceH Tôi đã cố sửa đổi amazon-cognito-auth-js [link] (https://github.com/aws/amazon-cognito-auth-js) để cho phép giao diện người dùng được lưu trữ liên lạc với ứng dụng của tôi . Thật không may là thông tin khác duy nhất tôi có là quảng cáo 'chúng tôi có một điều mới, kiểm tra xem' các bài đăng từ Amazon về giao diện người dùng – Fyreye

Trả lời

20

Tôi cũng phải vật lộn với điều này; Tôi đồng ý rằng tài liệu là một chút ánh sáng.

Các liên kết mà bạn cung cấp cho thấy những gì URL Cognito UI của bạn có thể trông giống như:

https://<your_domain>/login?response_type=code&client_id=<your_app_client_id>&redirect_uri=<your_callback_url> 

Ý tưởng là bạn gửi người dùng của bạn để URI này, họ làm kinh doanh của họ, và sau đó họ được chuyển lại cho bạn với một số loại mã thông báo hoặc mã. Bạn có thể kiểm tra tên miền của mình bằng cách nhấp vào "Tên miền" trong thanh điều hướng bên trái.

Cài đặt Khách hàng App và OAuth Grant loại

Thứ nhất, kiểm tra các thiết lập khách hàng App của bạn. Bạn cần phải cho phép (các) URL gọi lại của mình (trong đó Cognito sẽ chuyển hướng lại) và đảm bảo ít nhất một Luồng OAuth được cho phép.

Cognito App client settings

"Mã ủy quyền cấp" sẽ trả lại mã ủy quyền, mà sau đó bạn gửi đến oauth2/token endpoint để có được một access_token, id_token, và refresh_token. Đây là một lựa chọn tốt nếu bạn có một ứng dụng back-end và muốn thẻ làm mới.

"Trợ cấp ngầm định" là những gì tôi đang sử dụng trong ứng dụng giao diện người dùng của mình. Nó sẽ trả về mã thông báo truy cập và mã thông báo id trực tiếp cho ứng dụng đầu cuối của tôi.

Để sử dụng trợ cấp ngầm định, hãy thay đổi response_type=code thành response_type=token trong URL giao diện người dùng ẩn danh của bạn.

Implicit Grant Ví dụ

Vì vậy, nếu chuyển hướng của bạn sau khi xác thực thành công trông như thế này:

https://localhost:3000/#access_token=eyJraWQiOiJG...&id_token=eyJraWQZNg....&token_type=Bearer&expires_in=3600 

Bạn chỉ cần gọt vỏ id_token tắt URL và gửi nó đến Cognito, với tài khoản của bạn Pool là khóa trong bản đồ Logins.Trong Javascript:

AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
    IdentityPoolId: 'us-east-1:bxxxxxx6-cxxx-4xxx-8xxx-xxxxxxxxxx3c', 
    Logins: { 
     'cognito-idp.us-east-1.amazonaws.com/us-east-1_ixxxxxxx': idToken 
    } 
}); 

Trường hợp idToken là mã thông báo id trả về cho bạn khi chuyển hướng.

Authorization Mã Grant Loại

Nếu bạn sử dụng phép loại mã cấp thay vì (response_type = code), back-end của bạn sẽ cần phải gọi /oauth2/token endpoint để trao đổi mã cho thẻ. Cuộc gọi đó sẽ có dạng như sau:

curl -X POST \ 
    https://<my-cognito-domain>.auth.us-east-1.amazoncognito.com/oauth2/token \ 
    -H 'content-type: application/x-www-form-urlencoded' \ 
    -d 'grant_type=authorization_code&scope=email%20openid%20profile&redirect_uri=https%3A%2F%2Flocalhost%3A3000%2F&client_id=15xxxxxxxxxxxxxx810&code=54826355-b36e-4c8e-897c-d53d37869ee2' 

Sau đó, bạn có thể cung cấp mã thông báo id này cho Cognito như trên.

UI Ghi chú

ứng dụng của tôi là popping lên UI Cognito trong một tab mới khi người dùng nhấp vào một liên kết. Khi chuyển hướng quay trở lại ứng dụng của tôi, tôi sử dụng postMessage() để gửi mã thông báo đến cửa sổ chính, sau đó đóng tab mới. Tôi nghĩ rằng đây là một mô hình tương đối phổ biến.

Tôi chưa thử, nhưng tôi đoán việc hiển thị giao diện người dùng vào iframe không được phép, như là một biện pháp giảm thiểu chống nhấp chuột. Source


Tôi hy vọng điều này có phần ít hữu ích. Chúc may mắn!

+0

Tôi không thể lấy ví dụ cấp mã ủy quyền của bạn để làm việc trong một python Chalice lambda, sử dụng thư viện "Yêu cầu" python thay vì curl để tạo POST. Tôi chắc chắn rằng các hồ bơi người dùng được thiết lập ok vv vv như một yêu cầu theo hướng khác bằng cách sử dụng lệnh Warrant lib (mà cần id ứng dụng) hoạt động Thật không may các thông tin bạn trình bày ở đây có vẻ là tài nguyên tốt nhất hiện đang có sẵn bất cứ nơi nào :) Đây là lần đầu tiên tôi tìm thấy các tài liệu trên một tính năng AWS để được như vậy một ngỗng hoang dã đuổi theo – Vorsprung

+0

@Vorsprung nếu bạn muốn đăng một câu hỏi có chứa mã python của bạn và bất kỳ lỗi (s) bạn đang nhận được, tôi muốn được hạnh phúc để có một cái nhìn. –

+0

Cảm ơn rất nhiều tài liệu rất tốt. Nhưng làm cách nào bạn có thể tích hợp postMessage() trong giao diện người dùng Cognito? –

0
+3

Vấn đề chính ở đây là tất cả các bài viết này là thiết lập UI chứ không cần phải kết hợp giao diện người dùng và (nói) một trang web được lưu trữ trên EC2 từ phần cuối của mọi thứ (với JS hoặc PHP), chúng có một số ứng dụng ví dụ được viết (sau đó bạn có thể lưu trữ và tự chạy), nhưng chúng không tự giải thích và không đầy đủ chức năng [case1] (https://github.com/aws/amazon-cognito-auth-js/issues/25) [case2] (https://forums.aws.amazon.com/thread.jspa?threadID= 259132 & tstart = 25) – Fyreye

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