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!
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
@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