8

मैं एडब्ल्यूएस जावास्क्रिप्ट एपीआई का उपयोग कर रहा हूँ और सौंपा cognito आईडी प्राप्त करने की कोशिश:एडब्ल्यूएस cognito अमान्य पहचान पूल विन्यास

AWS.config.credentials.get(function(err) { 
    if (!err) { 
     console.log("Cognito Identity Id: " + AWS.config.credentials.identityId); 
    } 
}); 

क्यों नीचे संदेश के साथ एक 400 त्रुटि में इस परिणाम?

{"__type":"InvalidIdentityPoolConfigurationException","message":"Invalid identity pool configuration. Check assigned IAM roles for this pool."} 

मेरे पास प्रमाणीकृत और गैर-प्रमाणीकृत उपयोगकर्ताओं के लिए आईएएम भूमिकाएं कॉन्फ़िगर की गई हैं।

{ 
"Version": "2012-10-17", 
"Statement": [{ 
    "Action": [ 
     "mobileanalytics:PutEvents", 
     "cognito-sync:*" 
    ], 
    "Effect": "Allow", 
    "Resource": [ 
     "*" 
    ] 
}] 
} 

उत्तर

20

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

अमेज़ॅन कॉग्निटो में विश्वास संबंधों के बारे में अधिक जानकारी हमारे developer guide में मिल सकती है।

+0

सबसे पहले मैंने रोलऑर्न को कॉग्निटोइडेन्टिटी क्रेडेंशियल() में रखा और एक लिटल मिला ई आगे तब मुझे एहसास हुआ कि ट्रस्ट रिलेशनशिप में कॉग्निटो पहचान आईडी सही नहीं थी। मुझे नहीं पता कि गलत आईडी कैसे मिली। – drfence

+2

यह बिल्कुल सही जवाब है। –

18

कुछ खुदाई के बाद मुझे एहसास हुआ कि आपको अपने प्रमाण-पत्र में रोलअर्न और खाता आईडी जोड़ना होगा।

हालांकि वहाँ प्रलेखन के सबसे पर्याप्त होने के रूप में यह उल्लेख:

AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
    IdentityPoolId: 'us-east-1:xxxxx-a87e-46ed-9519-xxxxxxx', 
}); 

यह पर्याप्त नहीं था।

मैं यह करने के लिए किया था:

AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
    IdentityPoolId: 'us-east-1:xxxxx-a87e-46ed-9519-xxxxx', 
    RoleArn: 'arn:aws:iam::xxxxx:role/Cognito_xxxxUsersUnauth_Role', 
    AccountId: 'xxxxxxxxx', // your AWS account ID 
}); 

लिए आपको अपनी पहचान पूल के लिए अपनी भूमिका के ARN उल्लेख करना होगा।

एकमात्र डॉक्टर जो इसका उल्लेख करता है वह this one है।

गलत लोगों को:

शायद मैं कुछ याद कर रहा हूँ, लेकिन यह निश्चित रूप से भ्रामक है।

+3

आप मेरे लिए भगवान हैं – ryutamaki

+0

मुझे नहीं लगता कि यह आवश्यक है। जैसा कि बॉब ने दूसरे जवाब में उल्लेख किया है, आप अपनी आईएएम भूमिका के लिए ट्रस्ट रिलेशनशिप स्थापित कर सकते हैं। मैंने गलती से 'AWS.config.credentials.get' पर 'अवैध IDentityPoolConfigurationException' को अपना पहचान पूल दोबारा बनाकर और कॉग्निटो प्रमाणीकृत आईएएम भूमिका के लिए ट्रस्ट रिलेशनशिप को अपडेट करना भूल गया। –

+1

इसके अलावा, मुझे जेएस में सार्वजनिक वेबसाइट पर मेरी एडब्ल्यूएस खाता आईडी और भूमिका की जानकारी को उजागर करने का विचार पसंद नहीं है। –

1

अपनी पहचान पूल, प्रमाणीकरण उपयोगकर्ताओं को दी गई भूमिका के "ट्रस्ट रिलेशनशिप" अनुभाग की जांच करें। सुनिश्चित करें कि आपके पास आपके कॉग्निटो पूल तक पहुंच परिभाषित करने वाली नीतियां हैं।

आवश्यकता नीति बयानों प्राप्त करने के लिए सबसे आसान तरीका है,

  1. संपादित पूल
  2. पहचान पूल
  3. IAM संपादित में नीति बयान कॉपी करने के लिए
  4. जोड़ें इस भूमिका के लिए नई भूमिका बनाएं इन ट्रस्ट रिश्तों को आपकी आवश्यक मौजूदा भूमिका
संबंधित मुद्दे