Я использую AWS Congito User Pools для управления учетными записями с помощью Cognito Identity Pool, в котором этот пул пользователей используется в качестве поставщика удостоверений. Я использую это для управления доступом к API через API-шлюз, который отправляет запросы в Lambda. Моя лямбда реализована на Java 8 с использованием Micronaut. Все это работает нормально.
В Lambda, я получаю название от Principal
в 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;
}
Что возвращается в имени строки Cognito identityId. Что-то вроде этого:
мы-восток-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx
Я хотел бы либо зарегистрировать фактический логин пользователя, либо, по крайней мере, каким-то образом преобразовать identityId в логин при необходимости.
LookupDeveloperIdentity вызова API , как представляется , правильный путь идти об этом, но я не могу получить его на работу.
Попытка сделать это с помощью Java и 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;
}
бросает исключение
software.amazon.awssdk.services.cognitoidentity.model.NotAuthorizedException: у вас нет доступа к этому идентификатору (служба: CognitoIdentity, код статуса: 400, идентификатор запроса: 64e36646-612b-4985-91d1-82aca770XXXX)
Попытка сделать это через CLI приводит к похожему результату:
aws cognito-identity поиск-удостоверение разработчика -identity-id us-east-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx - id-ID-идентификатора us-east-1: xxxx0aa1-89f9-4418-be04- 7e83c838xxxx - max-results = 10
Произошла ошибка (NotAuthorizedException) при вызове операции LookupDeveloperIdentity: у вас нет доступа к этому идентификатору
Я убедился, что политика IAM должна быть в состоянии справиться с этим, и когда я пробую ее с ролью, у которой нет этой политики, я получаю другую ошибку
{
"Effect": "Allow",
"Action": [
"cognito-identity:LookupDeveloperIdentity"
],
"Resource": [
"arn:aws:cognito-identity:us-east-1:##########:identitypool/us-east-1:xxxx0aa1-89f9-4418-be04-7e83c838xxxx"
]
}
Таким образом, вопросы сводятся к:
- Это лучший способ получить имя пользователя из пула идентификаторов?
- Если это так - что я делаю неправильно?
- Если это не так - что может быть лучше?
Are you sure you are using the credentials from the account which owns the identity pool you are requesting lookupDeveloperIdentity for?
- forums.aws.amazon.com/thread.jspa?threadID=231354 Для меня это выглядит как разрешение пользователя, а не как роль IAM.