मैं एक Cognito Identity Pool के साथ खाता प्रबंधन के लिए AWS कांगिटो उपयोगकर्ता पूल का उपयोग कर रहा हूं, जिसमें पहचान प्रदाता के रूप में यह उपयोगकर्ता पूल है। मैं एपीआई गेटवे के माध्यम से एक एपीआई तक पहुंच को नियंत्रित करने के लिए इसका उपयोग कर रहा हूं जो लैम्बडा को अनुरोध भेजता है। मेरा लैम्ब्डा जावा 8 के साथ माइक्रोनेटर का उपयोग करके लागू किया गया है। यह सब ठीक काम कर रहा है।
लंबोदर में, मुझे इसमें से नाम मिल रहा 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 आइडेंटीआईड के स्ट्रिंग नाम में वापस क्या आ रहा है। कुछ इस तरह:
हमें पूर्व-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx
मैं या तो वास्तविक उपयोगकर्ता लॉगिन को लॉग इन करना चाहूंगा या कम से कम किसी तरह से पहचान को परिवर्तित करने के लिए कोई रास्ता होगा जब जरूरत हो।
इस बारे में जाने के लिए LookupDeveloperIdentity API कॉल सही तरीका प्रतीत होता है, लेकिन मैं इसे काम करने में असमर्थ पा रहा हूं।
जावा और AWS जावा 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)
सीएलआई के माध्यम से ऐसा करने का प्रयास एक समान परिणाम उत्पन्न करता है:
aws कॉग्निटो-पहचान लुक-डेवेलपर-आइडेंटिटी-आइडेंटिटी-आईडी us-east-1: xxxxe650-53f4-4cba-b553-5dff42bexxxx --ident-pool-id-us-East-1-xxxx0aa1-89f9-4418-be04- 7e83c838xxxx - max-results = 10
लुकअप डिवेलपर्सडेंटिटी ऑपरेशन को कॉल करते समय एक त्रुटि हुई (NotAuthorizedException): आपके पास इस पहचान तक पहुँच नहीं है
मैंने यह सुनिश्चित कर लिया है कि 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?
- forum.aws.amazon.com/thread.jspa?threadID=231354 मेरे लिए यह एक उपयोगकर्ता की अनुमति जैसा दिखता है, IAM भूमिका मुद्दा नहीं।