संज्ञानात्मक पहचान पूल पहचान Id से संज्ञानात्मक उपयोगकर्ता पूल उपयोगकर्ता नाम प्राप्त करना


10

मैं एक 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"
        ]
    }

तो सवाल उबलते हैं:

  • क्या यह उपयोगकर्ता पूल उपयोगकर्ता नाम पहचान पूल आईडी से प्राप्त करने का सबसे अच्छा तरीका है?
    • अगर यह है - मैं क्या गलत कर रहा हूँ?
    • यदि यह नहीं है - यह करने का एक बेहतर तरीका क्या है?

क्या आप docs.aws.amazon.com/cognitoidentity/latest/APIReference/… को आज़मा सकते हैं, जो उच्च-मात्रा संचालन के लिए दृष्टिकोण की सिफारिश करते हैं। 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 भूमिका मुद्दा नहीं।
जन गरज

मैंने कोशिश की है कि के रूप में अच्छी तरह से, और एक ही त्रुटि संदेश मिला है। मुझे यकीन है कि मैं उस खाते से क्रेडेंशियल्स का उपयोग कर रहा हूं जो पहचान पूल का मालिक है - पूल पर अन्य ऑपरेशन ठीक काम करते हैं। यह एक उपयोगकर्ता की अनुमति होने के नाते ... अजीब लगता है ... लेकिन यदि हां, तो मुझे यह जानना अच्छा लगेगा कि किसी सर्वर के लिए उपयोगकर्ता की अनुमति कैसे प्राप्त करें।
कैदी

जवाबों:


6

वैकल्पिक दृष्टिकोण

उपयोगकर्ता के उपयोगकर्ता पूल उपयोगकर्ता आईडी को पुनः प्राप्त करने के लिए आप अपने लंबो में पुनः प्राप्त कर सकते हैं:

authProvider = event.requestContext.identity.cognitoAuthenticationProvider;

यह एक स्ट्रिंग लौटाएगा जिसमें उपयोगकर्ता का उपयोगकर्ता पूल उपयोगकर्ता आईडी शामिल होगा और यह कुछ इस तरह दिखाई देगा:

cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx,cognito-idp.us-east-1.amazonaws.com/us-east-1_aaaaaaaaa:CognitoSignIn:qqqqqqqq-1111-2222-3333-rrrrrrrrrrrr

जहाँ हम-पूर्व -1_aaaaaaaaa उपयोगकर्ता पूल आईडी और qqqqqqqq-1111-2222-3333-rrrrrrrrrrr उपयोगकर्ता पूल उपयोगकर्ता आईडी है। फिर आप स्ट्रिंग को विभाजित कर सकते हैं और उपयोगकर्ता आईडी निकाल सकते हैं।

ध्यान दें कि आपके द्वारा उपयोग किए जा रहे प्रमाणीकरण प्रदाता के आधार पर ये जानकारी अलग-अलग होंगी।

फिर अगर आपको यूजर आईडी के बजाय उपयोगकर्ता नाम की आवश्यकता है तो आप उस विशिष्ट उपयोगकर्ता आईडी के लिए उपयुक्त विवरण प्राप्त करके इसे सीधे उपयोगकर्ता पूल से निकाल सकते हैं।

संदर्भ

https://serverless-stack.com/chapters/mapping-cognito-identity-id-and-user-pool-id.html


स्वीकार किया गया (यकीनन, लेकिन खुशी है कि आपको बोनस प्रतिनिधि मिला है), यहां तक ​​कि उस पृष्ठ पर प्रलेखन भी कहता है: "जबकि नीचे की प्रक्रिया का दस्तावेजीकरण नहीं किया गया है" काश ऐसा करने के लिए एक वास्तविक दस्तावेज तरीका होता।
कैदी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.