2017-05-15 4 views
0

이 질문은 thisthis과 유사하게 보일 수 있습니다.

하지만 내 질문은 조금 다릅니다

내가 여러 단계를 정의인가 자를 사용하고있는 API 게이트웨이가 가지고있는 자원의 대부분이 방법 (POST/GET) 정상 HTTP 엔드 포인트와의 통합을 즉, 문제의 끝점으로 "통과"한다는 의미입니다 (HTTP 프록시 통합을 사용하지 않음). stageVariables에 enter image description here

이 엔드 포인트의 모든 지점 : 여기

은 예입니다.

그러나 특별한 이유 때문에이 stageVariable을 호출하기 전에 업데이트해야합니다. 내 생각은 사용자 정의 인증의 $context에서 $context.authorizer.variableName을 설정하고 가져 오는 것입니다.

내 문제는 내가 람다를 사용하지 않는다면 어떻게이 값을 업데이트 할까?

바디 매핑 템플릿을 어떻게 든 사용할 수 있습니다 (this linkthis link 참조).하지만 스테이지 변형을 업데이트하는 방법을 잘 모르겠습니다.

아이디어가 있으십니까?

+0

이것은 지원되지 않습니다. 컨텍스트에서 값을 설정할 수 있지만 http://docs.aws.amazon.com/apigateway/latest/developerguide/use-custom-authorizer.html의 단계 변수는 변경하지 마십시오. –

+0

@AbhignaNagaraja 알겠습니다. 그렇다면 통합 요청 내에서 컨텍스트 변수를 어떻게 사용 하시겠습니까? 주목해야 할 점은 .NET Core C# – Hexie

답변

1

다른 누구도이 문제를 다루지 않는 경우.

AWS 팀으로부터 3 일간의 지원을받은 후 여기에 2 가지 문제가있는 것 같습니다.

1 - stageVariables (전혀) 변경이 현재 불가능하다는 것을 확인했습니다.

2 - 신체 내의 변수가 $context$authorizer 인 경우 제한 사항이 있습니다. 참고 사항 : AWS 팀이 새 서비스 요청을 작성하여 진행하고 있습니다.

설명합니다 :

는 현재, Node.js를 당신이 데이터는 모든 사용자 정의 변수를 포함합니다 (event 매개 변수 내에서) 람다 함수에 전달되는 전체 페이로드에 액세스 할 수 있습니다. 이것은 C# 동등 물 - Lambda 함수 내에서 APIGatewayProxyRequest 요청 객체를 사용하는 경우와 동일하지 않습니다. 따라서 C#에서 노드 내의 전체 페이로드 (모든 사용자 지정 변수 포함)에 액세스 할 수 있지만 APIGatewayProxyRequest 개체에만 액세스 할 수 있습니다.의 속성 here를 찾을 수 있습니다

또는 짧은 :

public string Body { get; set; } 
    public IDictionary<string, string> Headers { get; set; } 
    public string HttpMethod { get; set; } 
    public bool IsBase64Encoded { get; set; } 
    public string Path { get; set; } 
    public IDictionary<string, string> PathParameters { get; set; } 
    public IDictionary<string, string> QueryStringParameters { get; set; } 
    public ProxyRequestContext RequestContext { get; set; } 
    public string Resource { get; set; } 
    public IDictionary<string, string> StageVariables { get; set; } 

을 따라서, 사용자 정의 또는 "알 수없는"개체 (들)에 대한 액세스를 허용하지.

길었던 이야기로 코드를 통해 stageVariables을 편집 할 수 없으며 전송되는 페이로드 내의 맞춤 변수로 작업하고 싶다면 노드 (event)를 통해 코딩해야합니다./python을 사용하거나 APIGatewayProxyRequest 객체 내의 기존 속성을 덮어 쓸 수 있습니다.

UPDATE (2 #을 처리하기) : 다음 람다 기능이 될 때까지 약

작품 :

작업이 오는 데이터의 전체 페이로드에 액세스하는 약이있다 APIGatewayProxyRequest 대신 System.IO.Stream을 가져옵니다. 그런 다음 자신을 구문 분석 할 수있는 원본 JSON에 액세스 할 수 있습니다. 해당 JSON에서 필요한 정보를 얻은 다음 JSON을 deserialize하여 APIGatewayProxyRequest로 가져올 수 있습니다.

1

당신은 상황에서 값을 설정하지만, 무대 변수

var generatePolicy = function(principalId, effect, resource) { 
    var authResponse = {}; 
    //... 
    // Can optionally return a context object of your choosing. 
    authResponse.context = {}; 
    authResponse.context.stringKey = "stringval"; 
    authResponse.context.numberKey = 123; 
    authResponse.context.booleanKey = true; 
    return authResponse; 
} 

컨텍스트가

$ context.authorizer.stringKey에서 사용할 수를 변경할 수 없습니다 ...

백엔드로 전달할 통합 요청 매핑 템플리트에 추가 할 수 있습니다.

+0

이전 질문에 언급했듯이이 작업은 C# .NET Core에서 수행 중이므로이 코드는 도움이되지 않습니다. – Hexie

+0

동일한 키를 가진 객체를 반환하면 작동합니다. 이 코드는 노드 js의 예제입니다. –

+0

여기에있는 문제는 이것이 노드 코드라는 것입니다. 우리는 여전히 (AWS 도움말을 통해) .NET 핵심 C#에서 이에 상응하는 것을 얻고 있습니다. 이 질문을 참조하십시오 : http://stackoverflow.com/questions/43990385/aws-lambda-c-sharp-accessing-custom-context – Hexie