gpt4 book ai didi

amazon-web-services - AWS API Gateway 忽略从自定义授权方 Lambda 函数返回的身份验证策略

转载 作者:行者123 更新时间:2023-12-05 03:01:26 25 4
gpt4 key购买 nike

我正在尝试在 API 网关上实现自定义授权,这将通过从 DynamoDB 读取它们来检查用户对其背后的每个特定端点的权限。

我将授权方与相关方法相关联(下面的屏幕截图) enter image description here

授权方似乎工作正常,它返回对我来说看起来不错的策略(看看下面)

{
"policyDocument" : {
"Version" : "2012-10-17",
"Statement" : [
{
"Action" : "execute-api:Invoke",
"Effect" : "Deny",
"Resource" : "arn:aws:execute-api:us-east-2:111111111111:mkvhd2q179/*/GET/api/Test"
}
]
},
"principalId" : "*"
}

但是,无论策略文档中返回的 Effect 授权方如何,API 网关仍然让所有请求通过。我从下面的 API 端点获得状态 200 和结果集。

关于 API 网关为什么会忽略该策略的任何想法?

附言在放星号之前,我尝试使用显式的 principalID( token 中的用户名/主题)。它的行为相同。

附言这是我的 Lambda 函数的完全简化版本,目前设置为始终返回拒绝作为策略效果...

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

var stream = token;
var handler = new JwtSecurityTokenHandler();
var jsonToken = handler.ReadToken(stream);
var tokenS = handler.ReadToken(token) as JwtSecurityToken;

return generatePolicy(tokenS.Subject, "Deny", "arn:aws:execute-api:us-east-2:111111111111:mkvhd2q179/*");
}

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];
authResponse.principalId = "*";

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; }
}

最佳答案

长话短说;删除/更改/检查网关中设置的“资源策略”。

我遇到了类似的问题。不知何故,我在网关的资源策略中设置了“允许 * 主体访问 * 资源”策略,该策略与授权方返回的任何内容相结合。我最终删除了所有资源策略并让授权者决定。

关于amazon-web-services - AWS API Gateway 忽略从自定义授权方 Lambda 函数返回的身份验证策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55727446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com