Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 通过API网关在REST URI中使用base64编码的路径参数_Amazon Web Services_Rest_Microservices_Aws Api Gateway - Fatal编程技术网

Amazon web services 通过API网关在REST URI中使用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

我有一个新的API端点,它有一个base64编码的路径参数。看起来是这样的:

/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编码的电子邮件地址呢?