Amazon web services 通过API网关在REST URI中使用base64编码的路径参数
我有一个新的API端点,它有一个base64编码的路径参数。看起来是这样的:Amazon web services 通过API网关在REST URI中使用base64编码的路径参数,amazon-web-services,rest,microservices,aws-api-gateway,Amazon Web Services,Rest,Microservices,Aws Api Gateway,我有一个新的API端点,它有一个base64编码的路径参数。看起来是这样的: /user/save/:userEmail userEmail是base64编码的 授权人无法批准此端点的令牌,但可用于其他端点。为什么呢?使用API网关时使用base64编码的路径参数是否有任何错误 lambda授权人如下所示: export async function tokenAuthorizer(event: APIGatewayTokenAuthorizerEvent): Promise<APIGa
/user/save/:userEmail
userEmail是base64编码的
授权人无法批准此端点的令牌,但可用于其他端点。为什么呢?使用API网关时使用base64编码的路径参数是否有任何错误
lambda授权人如下所示:
export async function tokenAuthorizer(event: APIGatewayTokenAuthorizerEvent): Promise<APIGatewayAuthorizerResult> {
const {authorizationToken, methodArn } = event;
const jwtHandler = new JWT();
let valid = jwtHandler.decodeToken(authorizationToken);
if (valid){
valid = await jwtHandler.validateToken();
}
return jwtHandler.generatePolicy(valid, methodArn);
}
generatePolicy(allowed: boolean, methodArn: string): APIGatewayAuthorizerResult {
const effect = allowed ? 'Allow' : 'Deny';
const policy: APIGatewayAuthorizerResult = {
principalId: this.principalId,
policyDocument: {
Version: '2012-10-17',
Statement: [
{
Action: 'execute-api:Invoke',
Effect: effect,
Resource: methodArn,
},
]
},
context: this.requestEnrich
};
return policy;
}
导出异步函数tokenAuthorizer(事件:APIGatewayTokenAuthorizerEvent):承诺{
const{authorizationToken,methodArn}=event;
const jwtHandler=new JWT();
让valid=jwtHandler.decodeToken(authorizationToken);
如果(有效){
valid=wait jwtHandler.validateToken();
}
返回jwtHandler.generatePolicy(有效,methodArn);
}
generatePolicy(允许:布尔,方法:字符串):APIGatewayAuthorizerResult{
常量效果=允许?'Allow':'Deny';
常量策略:APIGatewayAuthorizerResult={
普林西比:这个,普林西比,
政策文件:{
版本:“2012-10-17”,
声明:[
{
操作:“执行api:调用”,
效果:效果,,
资料来源:methodArn,
},
]
},
上下文:this.requestEnrich
};
退货政策;
}
1 URL长度可以是超长的。>2000个字符可能不太可能,因为电子邮件没有那么长。您是否记录了解码的JWT处理程序的值?base64值并不是一个好的路径参数,因为base64允许使用
+
和/
等字符。您是否确定正在对base64编码路径参数进行URL编码?为什么不跳过base64编码,只接受url编码的电子邮件地址呢?