You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Node.js在AWS中通过HTTPS API为Lambda函数配置自定义授权器

用Node.js在AWS HTTPS API中为Lambda配置自定义授权器

以下是针对新手的分步操作指南,包含代码示例和关键注意事项:

1. 创建自定义授权器Lambda函数

首先在AWS控制台创建一个Node.js运行时的Lambda函数,用于验证请求合法性并生成IAM策略:

授权器Lambda代码示例

exports.handler = async (event) => {
    // 提取请求头中的Authorization令牌
    const authHeader = event.headers?.authorization;
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
        return generatePolicy('unauthorized', 'Deny', event.routeArn);
    }

    const token = authHeader.split(' ')[1];

    // --------------------------
    // 这里替换为你的真实令牌验证逻辑
    // 示例:简单验证令牌是否匹配预设值(生产环境请用JWT/OAuth2等安全方式)
    const isValid = token === 'your-valid-secret-token';
    // --------------------------

    if (!isValid) {
        return generatePolicy('unauthorized', 'Deny', event.routeArn);
    }

    // 验证通过,返回允许策略,可附加上下文信息给后端Lambda
    return generatePolicy('valid-user-123', 'Allow', event.routeArn, {
        userId: 'user-123',
        userRole: 'editor'
    });
};

// 生成标准IAM策略的辅助函数
function generatePolicy(principalId, effect, resource, context) {
    const policy = {
        Version: '2012-10-17',
        Statement: [{
            Action: 'execute-api:Invoke',
            Effect: effect,
            Resource: resource
        }]
    };

    const response = { principalId, policyDocument: policy };
    if (context) response.context = context;
    return response;
}

注意事项

  • 生产环境请使用jsonwebtoken库验证JWT令牌(需在Lambda层或打包时包含依赖)
  • 确保Lambda执行角色有基本的日志权限(方便排查问题)

2. 配置API Gateway自定义授权器

  1. 打开AWS API Gateway控制台,选择你的HTTPS API
  2. 进入授权器页面,点击「创建授权器」:
    • 类型选择「Lambda」
    • 选择刚才创建的授权器Lambda函数
    • 身份源填写$request.header.Authorization(指定从请求头提取令牌)
    • 输入授权器名称(如CustomAPIAuthorizer),保存
  3. 将授权器绑定到需要保护的路由:
    • 进入路由页面,选择目标路由(如/protected)
    • 编辑该路由的集成设置,在「授权」下拉框中选择刚创建的授权器
    • 保存后重新部署API(API Gateway需部署才会生效)

3. 测试授权流程

测试授权器Lambda

在Lambda控制台创建测试事件,模拟API Gateway发送的请求:

{
  "headers": {
    "authorization": "Bearer your-valid-secret-token"
  },
  "routeArn": "arn:aws:execute-api:us-east-1:your-account-id:your-api-id/*/GET/protected"
}

执行测试,检查返回的策略是否为Allow状态。

测试HTTPS API

使用curl或Postman发送请求:

  • 合法请求(带正确令牌):
    curl -H "Authorization: Bearer your-valid-secret-token" https://your-api-id.execute-api.us-east-1.amazonaws.com/protected
    
    应返回200状态码和后端Lambda的响应。
  • 非法请求(无令牌或错误令牌):
    curl https://your-api-id.execute-api.us-east-1.amazonaws.com/protected
    
    应返回401或403状态码。

4. 后端Lambda获取授权上下文

如果授权器返回了上下文信息,后端Lambda可以通过event.requestContext.authorizer获取:

exports.handler = async (event) => {
    const { userId, userRole } = event.requestContext.authorizer;
    return {
        statusCode: 200,
        body: JSON.stringify({
            message: '访问受保护资源成功',
            userId,
            userRole
        })
    };
};

内容的提问来源于stack exchange,提问作者Viranga Bogahalanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:16:05