Saya menggunakan Kelompok Pengguna AWS Congito untuk manajemen akun dengan Kelompok Identitas Cognito yang menjadikan Kelompok Pengguna ini sebagai Penyedia Identitas. Saya menggunakan ini untuk mengontrol akses ke API melalui API Gateway yang mengirimkan permintaan ke Lambda. Lambda saya diimplementasikan dengan Java 8 menggunakan Micronaut. Semua ini bekerja dengan baik.
Di Lambda, saya mendapatkan nama dari Principal
dalam 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;
}
Apa yang akan muncul kembali dalam nama string dari Cognito identityId. Sesuatu seperti ini:
us-east-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx
Saya ingin mencatat login pengguna yang sebenarnya atau setidaknya memiliki beberapa cara untuk mengubah identitas ID ke login saat diperlukan.
The LookupDeveloperIdentity API panggilan tampaknya menjadi cara yang tepat untuk pergi tentang ini, tapi saya tidak dapat mendapatkannya bekerja.
Mencoba melakukan ini dengan Java dan 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;
}
melempar pengecualian
software.amazon.awssdk.services.cognitoidentity.model.NotAuthorizedException: Anda tidak memiliki akses ke identitas ini (Layanan: CognitoIdentity, Kode Status: 400, ID Permintaan: 64e36646-612b-4985-91d1-82aca770XXXX)
Mencoba melakukan ini melalui CLI menghasilkan hasil yang serupa:
aws pencarian identitas-identitas-pengembang-identitas - identitas-id us-east-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx --identity-pool-id us-east-1: xxxx0aa1-89f9-4418-be04- 7e83c838xxxx --max-results = 10
Terjadi kesalahan (NotAuthorizedException) saat memanggil operasi LookupDeveloperIdentity: Anda tidak memiliki akses ke identitas ini
Saya telah memastikan kebijakan IAM yang berlaku harus dapat menangani ini, dan ketika saya mencobanya dengan peran yang tidak memiliki kebijakan ini, saya mendapatkan kesalahan yang berbeda.
{
"Effect": "Allow",
"Action": [
"cognito-identity:LookupDeveloperIdentity"
],
"Resource": [
"arn:aws:cognito-identity:us-east-1:##########:identitypool/us-east-1:xxxx0aa1-89f9-4418-be04-7e83c838xxxx"
]
}
Jadi pertanyaannya bermuara pada:
- Apakah ini cara terbaik untuk mendapatkan nama pengguna kumpulan dari id kumpulan identitas?
- Jika ya - apa yang saya lakukan salah?
- Jika tidak - apa cara yang lebih baik untuk melakukan ini?
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 Bagi saya sepertinya izin pengguna, bukan masalah peran IAM.Jawaban:
Pendekatan alternatif
Untuk mengambil id pengguna Pool User pengguna Anda dapat mengambil di lambda Anda:
Ini akan mengembalikan string yang akan menyertakan ID pengguna User Pool pengguna dan akan terlihat seperti:
Di mana us-east-1_aaaaaaaaa adalah id Pool Pengguna dan qqqqqqqq-1111-2222-3333-rrrrrrrrrrrrrr adalah User Pool User Id. Anda kemudian dapat memisahkan string dan mengekstrak ID pengguna.
Perhatikan bahwa info ini akan berbeda tergantung pada penyedia otentikasi yang Anda gunakan.
Kemudian jika Anda memerlukan nama pengguna dan bukan ID pengguna, Anda dapat mengekstraknya langsung dari kelompok pengguna dengan mendapatkan detail yang sesuai untuk ID pengguna tersebut.
Referensi
https://serverless-stack.com/chapters/mapping-cognito-identity-id-and-user-pool-id.html
sumber