2017-04-04 5 views
5

के साथ कस्टम authorizer डेटा अतीत में Node.js साथ बड़े पैमाने पर काम करने के बाद, हम वर्तमान में एक विकल्प के मंच के रूप में लैम्ब्डा ASP.NET कोर जांच कर रहे हैं।Amazon.Lambda.AspNetCoreServer

अतीत में, हमारी एपीआई गेटवे-फ्रंट वाली सेवाएं एक कस्टम प्राधिकरण पर निर्भर थीं, जिसने उपयोगकर्ता को प्रमाणित किया और हमारी कंपनी की आईएएम सेवा से संसाधन-आधारित अनुमति नीतियों की एक सूची पुनर्प्राप्त की। authorizer authContext कुंजी है कि सूची जुड़ जाता है। हमारी सेवाएं एपीआई गेटवे के साथ लैम्ब्डा प्रॉक्सी के माध्यम से एकीकृत होंगी और कच्चे प्रॉक्सी अनुरोध से मुख्य वस्तु निकालेंगी।

Amazon.Lambda.AspNetCoreServer का उपयोग करते समय एपीआई गेटवे और ASP.NET के बीच अनुवाद करने के लिए, हम एक ऐसी ही परिदृश्य पर पहुंचने में असमर्थ हैं।

Amazon.Lambda.AspNetCoreServer :: ApiGatewayProxyFunction :: FunctionHandlerAsync (स्ट्रीम responseStream, ILambdaContext lambdaContext), या उस बात के लिए किसी भी बराबर लैम्ब्डा हैंडलर हस्ताक्षर, पहले पैरामीटर में पूर्ण है, कच्चे अनुरोध प्राप्त करता है। यह धारा (उदाहरण के लिए, एक JSON.NET JObject में) को क्रमानुसार और वहाँ प्रिंसिपल वस्तु को निकालने के लिए संभव है।

हालांकि, एएसपी.NET अनुप्रयोग के भीतर उस डेटा तक पहुंचने में क्या मुश्किल साबित होती है। मुझे विश्वास नहीं है कि प्राधिकरण प्रतिक्रिया HTTP संदर्भ में पारित की जाती है। इसे जांचते समय, दावा प्रिंसिपल संदर्भ। उपयोगकर्ता कुंजी में कोई डेटा नहीं है।

कई समाधान के आसपास फेंक दिया गया:

  • ओवरराइड FunctionHandlerAsync में IAM जानकारी पुन: प्राप्त करने और उन्हें विश्व स्तर पर भंडारण वातावरण चर या सत्र
  • एक अंतरफलक और एक IAM प्रदाता सेवा के एक पूरक कार्यान्वयन बनाने का उपयोग कर। यह आईएएम जानकारी पुनर्प्राप्त करने के लिए एक विधि का पर्दाफाश करेगा। कार्यान्वयन केवल दावों की एक deserialized सूची वापस करेगा। सेवा एक ओवर्रिडिन इनिट (IWebHostBuilder) विधि में कॉन्फ़िगर किया जाएगा।
  • एक साथ एक (दावा/सामान्य) प्रधान वस्तु चिपकाने और HTTP संदर्भ

इस सफाई से प्राप्त करने के लिए एक रास्ता है करने के लिए इसे पारित करने का प्रयास?

उत्तर

1

हम ठीक उसी स्थिति में है और मैं किसी भी तरह से एक अच्छे और साफ समाधान की पेशकश कर सकते हैं, लेकिन मैं एक समाधान है।

आप अनुरोध पेलोड को देखें, तो json इस प्रकार फ़ॉर्मेट है:

{ 
    [...] 
    "requestContext": { 
     [...] 
     "authorizer": { 
      "claims": { 
       "claim1": "value1", 
       "claim2": "value2", 
       "claim3": "value3", 
      } 
     }, 
     [...] 

APIGatewayProxyFunction.FunctionHandlerAsync में वे एक APIGatewayProxyRequest में requestStream deserialize। आप उस वर्ग में कदम तो आप पाएंगे कि json के authorizer भाग में deserialized हो जाता है:

public class APIGatewayCustomAuthorizerContext 
{ 
    public string PrincipalId { get; set; } 
    public string StringKey { get; set; } 
    public int? NumKey { get; set; } 
    public bool? BoolKey { get; set; } 
} 

यानी सभी दावों अक्रमांकन में खो जाते हैं। मैं इस मुद्दे को यहाँ पोस्ट किया है: वैकल्पिक हल के लिए https://github.com/aws/aws-lambda-dotnet/issues/98

अब, मैं बस कुछ डाल दिया है कि "काम" एक साथ here (कोड here):

ध्यान दें कि यह बहुत अपरीक्षित है।:-)

उपयोग:

public class LambdaEntryPoint : APIGatewayAuthorizerProxyFunction 
{ 
    protected override void Init(IWebHostBuilder builder) 
    { 
     builder 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseStartup<Startup>() 
      .UseApiGateway(); 
    } 
} 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^