Sto utilizzando i pool di utenti AWS Congito per la gestione degli account con un pool di identità Cognito che ha questo pool di utenti come provider di identità. Sto usando questo per controllare l'accesso a un'API tramite API Gateway che invia richieste a Lambda. My Lambda è implementato con Java 8 usando Micronaut. Tutto questo funziona bene.
Nella Lambda, sto ottenendo il nome da Principal
in 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;
}
Cosa sta tornando nel nome stringa dell'identità Cognito. Qualcosa come questo:
noi-est-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx
Vorrei registrare il login utente effettivo o almeno avere un modo per convertire l'identitàId al login quando necessario.
La chiamata API LookupDeveloperIdentity sembra essere il modo giusto per farlo, ma non riesco a farlo funzionare.
Tentativo di eseguire questa operazione con Java e 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;
}
genera un'eccezione
software.amazon.awssdk.services.cognitoidentity.model.NotAuthorizedException: non hai accesso a questa identità (Servizio: CognitoIdentity, Codice stato: 400, ID richiesta: 64e36646-612b-4985-91d1-82aca770XXXX)
Il tentativo di eseguire questa operazione tramite l'interfaccia della riga di comando produce un risultato simile:
aws cognito-identity lookup-developer-identity --identity-id us-east-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx --identity-pool-id us-east-1: xxxx0aa1-89f9-4418-be04- 7e83c838xxxx --max-results = 10
Si è verificato un errore (NotAuthorizedException) durante la chiamata dell'operazione LookupDeveloperIdentity: non hai accesso a questa identità
Mi sono assicurato che la politica IAM in atto dovesse essere in grado di gestirla e quando provo con un ruolo che non ha questa politica, ricevo un errore diverso
{
"Effect": "Allow",
"Action": [
"cognito-identity:LookupDeveloperIdentity"
],
"Resource": [
"arn:aws:cognito-identity:us-east-1:##########:identitypool/us-east-1:xxxx0aa1-89f9-4418-be04-7e83c838xxxx"
]
}
Quindi le domande si riducono a:
- È questo il modo migliore per ottenere il nome utente del pool di utenti dall'ID del pool di identità?
- Se lo è, cosa sto facendo in modo errato?
- In caso contrario, qual è il modo migliore per farlo?
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 Per me sembra un'autorizzazione dell'utente, non un problema di ruolo IAM.