2017-01-03 33 views
3

AWS API Gatewayのカスタム認証に関して、C#でコード化されたラムダを使用して質問がありました。 AWSラムダのドキュメントに、次のように関数シグネチャがある:C#AWS API Gatewayの実装カスタム認証Lambda

returnType handler-name(inputType input, ILambdaContext context) { 
    ... 
} 

inputTypeと戻り値の関数ハンドラに指定する必要があります。 API Gatewayでのカスタム認証では、inputTypeとreturnTypesはどのようにすべきですか?前もって感謝します。

答えて

1

が、私はそれが私のために働い使用した溶液を投稿したかったです。ジョシュ・マアグが正しい方向に向いてくれてありがとう。基本的に、私はいくつかの単純なクラスを作成:作成した上記のクラスで

public class TokenAuthorizerContext 
{ 
    public string Type { get; set; } 
    public string AuthorizationToken { get; set; } 
    public string MethodArn { get; set; } 
} 

public class AuthPolicy 
{ 
    public PolicyDocument policyDocument { get; set; } 
    public string principalId { get; set; } 
} 

public class PolicyDocument 
{ 
    public string Version { get; set; } 
    public Statement[] Statement { get; set; } 
} 

public class Statement 
{ 
    public string Action { get; set; } 
    public string Effect { get; set; } 
    public string Resource { get; set; } 
} 

`` `

を、私のハンドラへの署名は次のとおりです。

public async Task<AuthPolicy> FunctionHandler(TokenAuthorizerContext request, ILambdaContext context) 
0

実際には、次のリンクを見て、それに従ってください。完全なチュートリアルは、あなたがそれに慣れていないなら、ただ一緒に従うと、完全なウォークスルーを読むためにあなたのベストを尽くすので、Pythonのを使用して書かれているが、このリンクは、C#の部分を説明します:

http://docs.aws.amazon.com/lambda/latest/dg/get-started-step5-optional.html

基本的に、文字列:

public string MyHandler(int count, ILambdaContext context) { ... } 

publicは次のとおりです。

returnType handler-name(inputType input, ILambdaContext context) { 

は(AWSページからコピーされた)このようなものになるだろうスコープ修飾子としてdded、開発者が選択したreturnTypestringhandler-nameMyHandlerで、inputTypeint

+0

この質問は、ラムダを使用するAPIゲートウェイでのカスタム認証に固有のものです。私はAPIゲートウェイが入力を提供するので、それが提供する入力タイプまたはそれが期待する戻りタイプを知らないので、入力を制御できません。 – user2689570

+0

私はそれが同じだと思います。たとえば、C#といくつかの類似点を持つaswlabsのJava実装を見てみましょう。 https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints/java/src 彼らが持っているあなたが例/ APIGatewayAuthorizerHandler.javaを見ると、あなたが見ることができます。 'public AuthPolicy handleRequest(TokenAuthorizerContext input、コンテキストコンテキスト){..} ' –

2

私は、このA手の込んだだろうと思いましたビット。これは、ここで行われたことの一部を使用するだけでなく、ここで私たちに与えた例のようにしようとしました。 http://docs.aws.amazon.com/apigateway/latest/developerguide/use-custom-authorizer.html

非同期である必要があるかどうかわからないのですか?私はしなかったし、これは基本的なスタートのためにかなりうまくいくように思えた。

public class Authorize 
{ 
    public Authorize() { } 

    public AuthPolicy AuthorizeHandler(TokenAuthorizerContext request, ILambdaContext context) 
    { 
     var token = request.AuthorizationToken; 

     switch (token.ToLower()) 
     { 
      case "allow": 
       return generatePolicy("user", "Allow", request.MethodArn); 
     } 

     return null; 
    } 

    private AuthPolicy generatePolicy(string principalId, string effect, string resource) 
    { 

     AuthPolicy authResponse = new AuthPolicy(); 
     authResponse.policyDocument = new PolicyDocument(); 
     authResponse.policyDocument.Version = "2012-10-17";// default version 
     authResponse.policyDocument.Statement = new Statement[1]; 

     Statement statementOne = new Statement(); 
     statementOne.Action = "execute-api:Invoke"; // default action 
     statementOne.Effect = effect; 
     statementOne.Resource = resource; 

     authResponse.policyDocument.Statement[0] = statementOne; 

     return authResponse; 
    } 

} 
public class TokenAuthorizerContext 
{ 
    public string Type { get; set; } 
    public string AuthorizationToken { get; set; } 
    public string MethodArn { get; set; } 
} 

public class AuthPolicy 
{ 
    public PolicyDocument policyDocument { get; set; } 
    public string principalId { get; set; } 
} 

public class PolicyDocument 
{ 
    public string Version { get; set; } 
    public Statement[] Statement { get; set; } 
} 

public class Statement 
{ 
    public string Action { get; set; } 
    public string Effect { get; set; } 
    public string Resource { get; set; } 
} 
関連する問題