API गेटवे एक्सेस करते समय गुम प्रमाणीकरण प्रमाणीकरण?


85

मैं AWS एपीआई गेटवे के माध्यम से एक लैम्ब्डा फ़ंक्शन को कॉल करने का प्रयास कर रहा हूं। जब मैं प्रमाणीकरण प्रकार का उल्लेख करता हूं तो यह ठीक काम करता है लेकिन एपीआई सार्वजनिक हो जाता है और url वाला कोई भी व्यक्ति मेरे API तक पहुंच सकता है। API कॉल को सुरक्षित बनाने के लिए, मैं प्रमाणीकरण प्रकार AWS_IAM का उपयोग कर रहा हूं और अपने उपयोगकर्ता के लिए AmazonAPIGatewayInvokeFullAccess नीति भी संलग्न की है, लेकिन यह त्रुटि हो रही है:

{ message: "Missing Authentication Token"}

मुझे नहीं पता कि मैं यहां क्या याद कर रहा हूं।


मेरा मानना ​​है कि यदि सभी उत्तर यहां किसी अन्य एडब्ल्यूएस सेवा (यानी: डायनमोडीबी) के लिए भी काम करेंगे, तो दिए गए एपीआई गेटवे रिसोर्स एंडपॉइंट के पीछे मैप किया जाएगा। यह मानते हुए कि एपीआई गेटवे ऑपरेटिव इंटरफ़ेस है (एडब्ल्यूएस सर्विस रिसोर्स नहीं)।
cellepo

त्रुटि गलत समापन बिंदु को हिट करने के परिणामस्वरूप है
रेक्सबेन

जवाबों:


45

मुझे लगता है कि आप सीधे एपीआई लिंक का उपयोग करने का प्रयास कर रहे हैं, यह काम नहीं करेगा क्योंकि एपीआई IAM भूमिका का उपयोग करके सुरक्षित है और आपको AWS प्रमाणीकरण यानी एक्सेस कुंजी और गुप्त कुंजी प्रदान करनी होगी।

अपने API का परीक्षण करने के लिए Postman Chrome एक्सटेंशन का उपयोग करें: http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html


हाय सद्दाम, SOAP ui में AWS प्रमाणीकरण कैसे किया जा सकता है। POSTMAN में, यह बहुत आसान है। क्या हमारे पास SOAP UI में समान तरीका है?
पंकज शर्मा

171

मैंने मूर्खतापूर्ण कारण के लिए कुछ समय खो दिया है:

जब आप एक चरण बनाते हैं, तो प्रदर्शित लिंक में URL का संसाधन भाग नहीं होता है:

API URL: https://1111.execute-api.us-east-1.amazonaws.com/dev

API + संसाधन URL https://1111.execute-api.us-east-1.amazonaws.com/dev/get-list

/ मिल-सूची याद आ रही थी

और निश्चित रूप से, आपको यह जांचने की आवश्यकता है कि विधि कॉन्फ़िगरेशन इस तरह दिखता है:

यहां छवि विवरण दर्ज करें


14
एक समस्या के लिए मूर्खतापूर्ण (लेकिन आम) कारणों को स्वीकार करने के लिए विशेष यश की आवश्यकता होती है। यह मुझे भी मिला।
जेफ रिचर्ड्स

क्षमा करें, मुझे समझ में नहीं आया कि आपका क्या मतलब है, यदि आप यह जांचना चाहते हैं कि प्रमाणीकरण का उपयोग करने के लिए पोस्ट अनुरोध सेटअप है या नहीं, तो आपको आपके द्वारा बनाए गए संसाधन के तहत, POST विकल्प पर क्लिक करने की आवश्यकता है, उदाहरण के लिए, आपके पास / my- हो सकता है अपने संसाधनों में पोस्ट-कॉल, और इसके तहत, आपके पास विकल्प और पोस्ट तरीके हैं। POST पर क्लिक करें, और फिर विधि कॉन्फ़िगरेशन में, आप देख सकते हैं कि क्या प्रमाणीकरण की आवश्यकता है। लेकिन यदि आप पोस्ट कॉल के लिए पूरा URL प्राप्त करना चाहते हैं, तो यह उसी तरह से काम करता है जैसे कि API URL + RESOURCE, उदाहरण के लिए, 1111.execute-api.us-east-1.amazonaws.com/dev/my- स्थिति- tcall
कार्लोस अल्बर्टो श्नाइडर

2
एक संबंधित, गूंगी बात जिसने मुझे थर्रा दिया: सुनिश्चित करें कि आपकी HTTP क्रिया सही है। मैं गलती से POST की जगह GET भेज रहा था। ऐसा लगता है कि आपको यह त्रुटि किसी भी मार्ग पर मिलेगी जो पथ और क्रिया दोनों के संदर्भ में बिल्कुल मेल नहीं खाती है
जोश

बहुत बहुत धन्यवाद !! यह बहुत आसान है जब आपने इसका उल्लेख किया। मुझे एहसास नहीं हुआ। आपको धन्यवाद!
8

FWIW, स्टेजेज ट्री में पहले संसाधन (इस मामले में, GET) पर क्लिक करने के बाद मेरा मानना ​​है कि सीधे उस संसाधन के लिए पूर्ण URL प्रकट करना चाहिए। अधिक जानकारी और मेरे संबंधित उत्तर में एक व्याख्यात्मक तस्वीर: stackoverflow.com/a/60858537/1357094
cellepo

21

मेरे पास बस यही मुद्दा था और ऐसा लगता है कि यह संदेश भी दिखाता है कि क्या संसाधन नहीं मिल सकता है।

मेरे मामले में मैंने एपीआई को अपडेट किया था, लेकिन फिर से तैयार करना भूल गया। अद्यतन API को मेरे चरण पर लागू करने के बाद समस्या हल हो गई थी।


यही कारण है कि मुझे यह काम करने के लिए मिला। संसाधन फिर से तैनात!
KQI

8

ऐसा लगता है (अप्रैल 2019 तक) एडब्ल्यूएस एपीआई गेटवे इस अपवाद को कई कारणों से फेंकता है - ज्यादातर जब आप एक समापन बिंदु मार रहे हैं कि एपीआई गेटवे तक पहुंचने में सक्षम नहीं है, या तो क्योंकि यह तैनात नहीं है, या उन मामलों में भी जहां विशेष रूप से HTTP विधि समर्थित नहीं है।

काश गेटवे अधिक उपयुक्त त्रुटि कोड भेजता है जैसे कि HTTP 405 विधि समर्थित नहीं है या HTTP 404 नहीं मिला है, बजाय एक सामान्य HTTP 403 निषिद्ध।


8

सुनिश्चित करें कि आप स्टैगस ट्री में पहले विशिष्ट संसाधन पर क्लिक कर रहे हैं, क्योंकि यह एक URL को संसाधन के लिए पूर्ण पथ के साथ आबाद करेगा (केवल रूट पथ के बजाय): यहां छवि विवरण दर्ज करें

अन्य कारणों के लिए, http://www.awslessons.com/2017/aws-api-gateway-missing-authentication-boken/ देखें



@sumanthshetty क्या आपने इस समाधान की कोशिश की, या यहाँ के बाकी उत्तरों में से कोई भी? या आपने यहां से AWS लिंक पढ़ा है?
cellepo

मैंने यहाँ से सभी उत्तर की कोशिश की है और लेख भी
सुमंत शेट्टी

6

सुनिश्चित करें कि आप संसाधन बनाएँ और फिर उसके अंदर विधि बनाएँ। मेरे लिए यही मुद्दा था। धन्यवाद

यहां छवि विवरण दर्ज करें


5

डॉक्स में यह पाया:

यदि AWS_IAM प्राधिकरण का उपयोग किया गया था, तो आप हस्ताक्षर संस्करण 4 प्रोटोकॉल का उपयोग करके अनुरोध पर हस्ताक्षर करेंगे।

हस्ताक्षर संस्करण 4 के साथ हस्ताक्षर का अनुरोध


आप अपने एपीआई के लिए एक एसडीके भी उत्पन्न कर सकते हैं।

एपीआई गेटवे में एक एपीआई के लिए एसडीके कैसे उत्पन्न करें

एक बार जब आप अपनी पसंद के मंच के लिए एसडीके उत्पन्न कर लेते हैं, तो चरण 6 में उल्लेख किया गया है कि यदि आप एडब्ल्यूएस क्रेडेंशियल्स का उपयोग कर रहे हैं, तो एपीआई से अनुरोध पर हस्ताक्षर किए जाएंगे:

  1. AWS क्रेडेंशियल्स के साथ API गेटवे-जनरेटेड SDK को इनिशियलाइज़ करने के लिए, निम्न के समान कोड का उपयोग करें। यदि आप एडब्ल्यूएस क्रेडेंशियल्स का उपयोग करते हैं, तो एपीआई के सभी अनुरोधों पर हस्ताक्षर किए जाएंगे। इसका मतलब है कि आपको प्रत्येक अनुरोध के लिए उपयुक्त CORS स्वीकार हेडर सेट करना होगा:

    var apigClient = apigClientFactory.newClient({
      accessKey: 'ACCESS_KEY',
      secretKey: 'SECRET_KEY',
    });
    

4

यदि आप AWS_IAM प्रमाणीकरण सक्षम करते हैं, तो आपको AWS हस्ताक्षर संस्करण 4 का उपयोग करके AWS क्रेडेंशियल के साथ अपने अनुरोध पर हस्ताक्षर करना चाहिए ।

नोट : AWS कंसोल में साइन इन करने पर आपके ब्राउज़र के अनुरोधों पर स्वचालित रूप से आपके एपीआई पर हस्ताक्षर नहीं होते हैं।


3

कभी-कभी यह संदेश तब दिखाई देता है जब आप एक गलत एपि कह रहे होते हैं

अपने एपीआई समापन बिंदु की जाँच करें


2

मैं उपरोक्त सभी कोशिश करता हूं, यदि आपने उपरोक्त उत्तरों में सभी चरण किए हैं, और आप समस्या का समाधान नहीं करते हैं, तो:

  1. बाएं मेनू पर, "संसाधन" हिट करें
  2. "संसाधन" के अधिकार में, एपीआई विधि को हिट करें जिसे आप परीक्षण करना चाहते हैं, जैसे "POST / GET आदि)
  3. "कार्रवाई" सूची को हिट करें (यह चरण 2 में एपीआई विधि से ऊपर है
  4. "DEPLOY API" चुनें (कृपया इसे करें, यहां तक ​​कि आप पहले से ही अपने एपीआई को तैनात करें)
  5. "परिनियोजन चरण" में "ठेस" का चयन करें या आप कभी भी अपनी पिछली तैनाती में लिखें (यह आपकी पिछली तैनाती को ओवरराइड कर देगा
  6. मारा हुआ तैनात

मुझे लगता है कि जब मैं "METHOD REQUEST" (इस मेनू में जाने के लिए चरण 2 देखें) को कैसे बनाता है, तो इस बात के लिए कि, "परीक्षण" में, मैं "AWS_IAM" का चयन करता हूँ, परीक्षण परीक्षण के विकल्प में, मैं इसे पोस्टमैन में आज़माता हूँ "तब मुझे समझ में आया" मेथोड रिक्स्ट "," ऑथराइजेशन "में, मुझे" कोई नहीं "चुनना चाहिए

मैं इसे किसी को नहीं बदलता, लेकिन मुझे AWS की बात है, इसे फिर से तैनात करने की आवश्यकता है, जैसा कि मैं समझाता हूं


1

यह त्रुटि ज्यादातर तब आती है जब आप गलत एफी एंड पॉइंट कहते हैं। अपने एपीआई अंतिम बिंदु को जांचें कि आप कॉल कर रहे हैं और इसे एपी गेटवे पर सत्यापित करें।


1

यदि आप किसी PRIVATE प्रकार के समापन बिंदु के साथ API का उपयोग कर रहे हैं , तो सुनिश्चित करें:

  1. आप अपने एडब्ल्यूएस खाते के भीतर से एपीआई का आह्वान कर रहे हैं (उदाहरण: आपके खाते में निर्मित ईसी 2 उदाहरण से)

  2. मार्ग 2 में EC2 उदाहरण में आवश्यक क्रेडेंशियल (एक्सेस और सीक्रेट कीज़) डालें ~ / .aws / क्रेडेंशियल्स (यह रूट लिनक्स इंस्टेंस के लिए है) यदि IAM उपयोगकर्ता MFA aws_session_token मान का उपयोग करना भी आवश्यक होगा।

  3. Vpce (vpc endpoint) आधारित URL का उपयोग करें। उदाहरण: कर्ल https://vpce-0c0471b7test-jkznizi5.execute-api.us-east-1.vpce.amazonaws.com/dev/api/v1/status

  4. आपके EC2 उदाहरण में सुरक्षा समूह है जो वीपीएन के स्वामित्व वाले किसी अन्य सुरक्षा समूह को आउटबाउंड ट्रैफ़िक की अनुमति देता है: EC2 उदाहरण एस.जी.

  5. आपका vpce सुरक्षा समूह EC2 उदाहरण के स्वामित्व वाले दूसरे सुरक्षा समूह (ec2 उदाहरण से पिछला sg) से इनबाउंड ट्रैफ़िक की अनुमति देता है: vpce एस.जी.

देखें: https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-pStreet-apis.html


1

मेरे मामले में यह काफी बेवकूफी वाली बात थी। मैंने उपयोग किया है कि POST का उपयोग करके नई इकाइयाँ बनाई गई हैं और यह "मिसिंग ऑथेंटिकेशन टोकन" के साथ विफल रही है। मुझे याद है कि किसी कारण से इसे PUT के रूप में परिभाषित किया गया था जो ठीक काम कर रहा है।


0

सबसे पहले, जांचें कि आपके द्वारा लाम्दा फ़ंक्शन में बनाई गई API आपके AWS प्रोजेक्ट के साथ पंजीकृत है या नहीं। उसके लिए, अपने एडब्ल्यूएस कंसोल में एपीआई गेटवे पर जाएं। यदि यह पंजीकृत नहीं है, तो इसे पंजीकृत करें। यह इस मुद्दे का मुख्य कारण है।

आप अपने aws.export.js फ़ाइल में भी देख सकते हैं , कि आपके API के अनुरूप पथ हैं ['/items']

आपका एपीआई वहां मौजूद होना चाहिए, अन्यथा यह अनुरोधों के लिए सुरक्षा टोकन को संलग्न नहीं करेगा। बस इसके लिए अपने कंसोल में अपने प्रोजेक्ट क्लाउड-लॉजिक में इसे पंजीकृत करें।

यदि यह वहाँ है, तो उपर्युक्त समाधान का उपयोग करें
http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html


0

रिकॉर्ड के लिए, यदि आप क्रेडेंशियल का उपयोग नहीं कर रहे हैं, तो यह त्रुटि तब भी दिखाई देती है जब आप अपने POST / PUT विधि में अनुरोध सत्यापनकर्ता को "बॉडी, क्वेरी स्ट्रिंग पैरामीटर और हेडर्स", या अन्य विकल्प "वैलिडेट क्वेरी स्ट्रिंग को मान्य" करने के लिए सेट कर रहे हैं। पैरामीटर और हेडर्स ".... उस स्थिति में यह हेडर पर क्रेडेंशियल्स के लिए दिखेगा और अनुरोध को अस्वीकार कर देगा। इसे जमा करने के लिए, यदि आप क्रेडेंशियल भेजने का इरादा नहीं रखते हैं और इसे खुला रखना चाहते हैं, तो आपको उस विकल्प को अनुरोध सत्यापनकर्ता में सेट नहीं करना चाहिए (इसे किसी के लिए या शरीर को मान्य करने के लिए सेट करें)


0

योगदान देना:

मेरे पास एक समान त्रुटि थी क्योंकि मेरी वापसी प्रतिक्रिया में इस तरह 'निकाय' शामिल नहीं था:

वापसी {'स्टेटसकोड': 200, 'बॉडी': "यदि आप इसे काम नहीं करेंगे तो शरीर का टैग अवश्य होना चाहिए"}


0

मुझे वही समस्या थी जिसे मैंने निम्नलिखित तरीके से हल किया:

परीक्षा विधि प्राप्त करें

https://54wtstq8d2.execute-api.ap-southeast-2.amazonaws.com/dev/echo/hello
Authorization tab -> 
•   select type(AWS signature)
•   Add AccessKey and SecretKey

0

यदि आप अपने सर्वर के लिए एक IAM भूमिका स्थापित करते हैं जिसमें AmazonAPIGatewayInvokeFullAccess अनुमति है, तो आपको अभी भी प्रत्येक अनुरोध पर हेडर पास करना होगा। आप इस तरह के aws-request- के साथ पुस्तकालय में अजगर कर सकते हैं :

import requests
from aws_requests_auth.boto_utils import BotoAWSRequestsAuth
auth = BotoAWSRequestsAuth(
    aws_host="API_ID.execute-api.us-east-1.amazonaws.com",
    aws_region="us-east-1",
    aws_service="execute-api"
)
response = requests.get("https://API_ID.execute-api.us-east-1.amazonaws.com/STAGE/RESOURCE", auth=auth)

0

खैर किसी को भी अभी भी समस्या है और मैं वास्तव में यह महसूस करने के बाद बहुत गूंगा महसूस करता हूं, लेकिन मैं /itemsएपीआई जोड़ने के दौरान डिफ़ॉल्ट के यूआरएल में पास हुआ । लेकिन मैं समापन बिंदु के साथ फोन करता रहा /api। विशेष धन्यवाद Carlos Alberto Schneider, जैसा कि मैंने आपकी पोस्ट पढ़ने के बाद मेरी समस्या को महसूस किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.