Tôi đang sử dụng Nhóm người dùng AWS Congito để quản lý tài khoản với Nhóm nhận dạng Cognito có Nhóm người dùng này làm Nhà cung cấp nhận dạng. Tôi đang sử dụng điều này để kiểm soát quyền truy cập vào API thông qua API Gateway gửi yêu cầu đến Lambda. Lambda của tôi được triển khai với Java 8 bằng Micronaut. Tất cả điều này đang hoạt động tốt.
Trong Lambda, tôi nhận được tên từ Principal
trong HttpRequest
:
protected String resolveUser( HttpRequest request ){
String ret = null;
Optional<Principal> principal = request.getUserPrincipal();
if( principal.isPresent() ){
ret = principal.get().getName();
}
if( ret == null || ret.length() == 0 ){
ret = "unknown";
}
return ret;
}
Điều gì đang quay trở lại trong tên chuỗi của nhận dạng Cognito. Một cái gì đó như thế này:
us-đông-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx
Tôi muốn đăng nhập thông tin đăng nhập người dùng thực tế hoặc ít nhất có một số cách để chuyển đổi nhận dạng sang đăng nhập khi cần.
Cuộc gọi API của LookDeveloperIdentity dường như là cách phù hợp để thực hiện điều này, nhưng tôi không thể làm cho nó hoạt động được.
Cố gắng thực hiện điều này với Java và AWS Java SDK 2:
protected String loadUsername( String user ){
String ret = "unknown:"+user;
CognitoIdentityClient cognito = CognitoIdentityClient.create();
LookupDeveloperIdentityRequest request = LookupDeveloperIdentityRequest.builder()
.identityPoolId( identityPoolId )
.identityId( user )
.build();
LookupDeveloperIdentityResponse response = cognito.lookupDeveloperIdentity( request );
List<String> identifiers = response.developerUserIdentifierList();
if( identifiers != null && identifiers.size() > 0 ){
ret = identifiers.get( 0 );
}
return ret;
}
ném một ngoại lệ
software.amazon.awssdk.service.cognitoidentity.model.NotAuthorizedException: Bạn không có quyền truy cập vào danh tính này (Dịch vụ: CognitoIdentity, Mã trạng thái: 400, ID yêu cầu: 64e36646-612b-4985-91d1-82
Cố gắng thực hiện điều này thông qua CLI tạo ra kết quả tương tự:
aws cognito-nhận dạng tra cứu-nhà phát triển-nhận dạng --identity-id us-East-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx --identity-pool-id us-East-1: xxxx0aa1-89f9-4418 7e83c838xxxx --max-results = 10
Đã xảy ra lỗi (NotAuthorizedException) khi gọi thao tác Tra cứuDeveloperIdentity: Bạn không có quyền truy cập vào danh tính này
Tôi đã đảm bảo chính sách IAM tại chỗ sẽ có thể xử lý việc này và khi tôi thử nó với vai trò không có chính sách này, tôi gặp một lỗi khác
{
"Effect": "Allow",
"Action": [
"cognito-identity:LookupDeveloperIdentity"
],
"Resource": [
"arn:aws:cognito-identity:us-east-1:##########:identitypool/us-east-1:xxxx0aa1-89f9-4418-be04-7e83c838xxxx"
]
}
Vì vậy, các câu hỏi sôi lên:
- Đây có phải là cách tốt nhất để lấy tên người dùng nhóm người dùng từ id nhóm nhận dạng?
- Nếu đó là - tôi đang làm gì không đúng?
- Nếu nó không phải là - cách tốt hơn để làm điều này là gì?
Are you sure you are using the credentials from the account which owns the identity pool you are requesting lookupDeveloperIdentity for?
- forum.aws.amazon.com/thread.jspa?threadID=231354 Đối với tôi, nó trông giống như sự cho phép của người dùng, không phải là vấn đề vai trò của IAM.