@aws-cdk/aws-apigatewayv2-authorizers-alpha

中文文档
2.114.1-alpha.0发布于 2023/12/06Apache-2.0TypeScriptCommonJS零依赖近 30 天下载 8.6万

此模块被贬值. 所有建筑现在都可以在aws-cdk-lib/aws-apigatewayv2授权器下使用

中文使用文档
文档目录11 节
  1. 目录
  2. 导言
  3. HTTP API 软件
  4. 默认授权
  5. 路由授权
  6. JWT 授权者
  7. Lambda 授权者
  8. IAM 授权者
  9. 网络锁定 APIs
  10. Lambda 授权者
  11. IAM 授权器

AWS APIGatewayv2 授权器


Deprecated

此API 可能会发出警告 。 后向兼容性没有保证 .


所有构造移到 aws- cdk-lib/aws- apigatewayv2 授权器 .

目录

导言

API Gateway 支持控制和管理您 HTTP API 访问的多机制. 他们主要是 分为Lambda授权者,JWT授权者,以及标准的AWS IAM角色和政策. 更多信息为: 可用时间 控制和管理对 HTTP 的访问 API 密码。 。 。 .

HTTP API 软件

HTTP API的接入控制是通过限制哪些路由可以被引用来管理.

授权器和范围可以适用于API,也可以具体适用于每个路由.

默认授权

在使用默认的授权时,API的所有路由都会继承配置.

在下文的例子中,所有路线都要求 manage:books (a) 为援引合并而存在的范围.

import { HttpJwtAuthorizer } from '@aws-cdk/aws-apigatewayv2-authorizers-alpha';

const issuer = 'https://test.us.auth0.com';
const authorizer = new HttpJwtAuthorizer('DefaultAuthorizer', issuer, {
  jwtAudience: ['3131231'],
});

const api = new apigwv2.HttpApi(this, 'HttpApi', {
  defaultAuthorizer: authorizer,
  defaultAuthorizationScopes: ['manage:books'],
});

路由授权

也可以为每个路由配置授权. 在配置路由授权时,它优先于默认授权.

下面的例子展示了默认的授权,以及路由的授权. 它还展示了如何完全取消对一条路线的授权.

  • GET /books 财务报告和审定财务报表 GET /books/{id} 使用 api 上的默认授权设置
  • POST /books 将要求 ['write:books'] 范围
  • POST /login 删除默认授权者( 未认证的路由)
import { HttpJwtAuthorizer } from '@aws-cdk/aws-apigatewayv2-authorizers-alpha';
import { HttpUrlIntegration } from '@aws-cdk/aws-apigatewayv2-integrations-alpha';

const issuer = 'https://test.us.auth0.com';
const authorizer = new HttpJwtAuthorizer('DefaultAuthorizer', issuer, {
  jwtAudience: ['3131231'],
});

const api = new apigwv2.HttpApi(this, 'HttpApi', {
  defaultAuthorizer: authorizer,
  defaultAuthorizationScopes: ['read:books'],
});

api.addRoutes({
  integration: new HttpUrlIntegration('BooksIntegration', 'https://get-books-proxy.example.com'),
  path: '/books',
  methods: [apigwv2.HttpMethod.GET],
});

api.addRoutes({
  integration: new HttpUrlIntegration('BooksIdIntegration', 'https://get-books-proxy.example.com'),
  path: '/books/{id}',
  methods: [apigwv2.HttpMethod.GET],
});

api.addRoutes({
  integration: new HttpUrlIntegration('BooksIntegration', 'https://get-books-proxy.example.com'),
  path: '/books',
  methods: [apigwv2.HttpMethod.POST],
  authorizationScopes: ['write:books']
});

api.addRoutes({
  integration: new HttpUrlIntegration('LoginIntegration', 'https://get-books-proxy.example.com'),
  path: '/login',
  methods: [apigwv2.HttpMethod.POST],
  authorizer: new apigwv2.HttpNoneAuthorizer(),
});

JWT 授权者

JWT授权人允许使用JSON Web Tokens(JWTs)作为以下内容的一部分: OpenID 连接 财务报告和审定财务报表 OAuth 2.0 数据 用于允许和限制客户端访问 HTTP API 的框架.

配置时,API Gateway验证客户端提交的JWT,并根据其内容允许或拒绝访问.

符号的位置由 identitySource 默认为 HTTP Authorization 头曰. 不过,它也 支持若干其他选项。 。 。 . 然后根据授权人和路线(范围)中定义的选项,对JWT进行解码并验证签名和索赔. 更多信息请检查 JWT 授权文件。 。 。 .

未获得授权的客户可收到2个答复:

  • 401 - Unauthorized 当JWT验证失败时
  • 403 - Forbidden - 当JWT验证成功但所需范围未达到时
import { HttpJwtAuthorizer } from '@aws-cdk/aws-apigatewayv2-authorizers-alpha';
import { HttpUrlIntegration } from '@aws-cdk/aws-apigatewayv2-integrations-alpha';

const issuer = 'https://test.us.auth0.com';
const authorizer = new HttpJwtAuthorizer('BooksAuthorizer', issuer, {
  jwtAudience: ['3131231'],
});

const api = new apigwv2.HttpApi(this, 'HttpApi');

api.addRoutes({
  integration: new HttpUrlIntegration('BooksIntegration', 'https://get-books-proxy.example.com'),
  path: '/books',
  authorizer,
});

用户池授权器

用户池授权器(User Pool Authorizer)是JWT授权器的一种,使用Cognitto用户池和app客户端来控制谁可以访问你的API. 在应用程序客户端成功授权后,所生成的访问符将被用作JWT.

客户端访问使用用户池授权的API,必须先在用户池签名并获得身份或访问令牌. 然后他们必须在指定的 identitySource aPI电话 更多信息,请访问 使用 Amazon Cognitto 用户 作为授权方的集合。 。 。 .

import * as cognito from 'aws-cdk-lib/aws-cognito';
import { HttpUserPoolAuthorizer } from '@aws-cdk/aws-apigatewayv2-authorizers-alpha';
import { HttpUrlIntegration } from '@aws-cdk/aws-apigatewayv2-integrations-alpha';

const userPool = new cognito.UserPool(this, 'UserPool');

const authorizer = new HttpUserPoolAuthorizer('BooksAuthorizer', userPool);

const api = new apigwv2.HttpApi(this, 'HttpApi');

api.addRoutes({
  integration: new HttpUrlIntegration('BooksIntegration', 'https://get-books-proxy.example.com'),
  path: '/books',
  authorizer,
});

Lambda 授权者

Lambda授权方使用Lambda函数来控制对您HTTP API的访问. 当客户端调用您的 API 时, API Gateway 引用了您的 Lambda 函数并使用响应来确定客户端是否可以访问您的 API .

Lambda授权者视其反应而定,属于两种类型――简单型或IAM型。 你可以学会不同 这里。 。 。 .

import { HttpLambdaAuthorizer, HttpLambdaResponseType } from '@aws-cdk/aws-apigatewayv2-authorizers-alpha';
import { HttpUrlIntegration } from '@aws-cdk/aws-apigatewayv2-integrations-alpha';

// This function handles your auth logic
declare const authHandler: lambda.Function;

const authorizer = new HttpLambdaAuthorizer('BooksAuthorizer', authHandler, {
  responseTypes: [HttpLambdaResponseType.SIMPLE], // Define if returns simple and/or iam response
});

const api = new apigwv2.HttpApi(this, 'HttpApi');

api.addRoutes({
  integration: new HttpUrlIntegration('BooksIntegration', 'https://get-books-proxy.example.com'),
  path: '/books',
  authorizer,
});

IAM 授权者

API 网关通过包含的内容支持 IAM HttpIamAuthorizer 和赠款语法:

import { HttpIamAuthorizer } from '@aws-cdk/aws-apigatewayv2-authorizers-alpha';
import { HttpUrlIntegration } from '@aws-cdk/aws-apigatewayv2-integrations-alpha';

declare const principal: iam.AnyPrincipal;

const authorizer = new HttpIamAuthorizer();

const httpApi = new apigwv2.HttpApi(this, 'HttpApi', {
  defaultAuthorizer: authorizer,
});

const routes = httpApi.addRoutes({
  integration: new HttpUrlIntegration('BooksIntegration', 'https://get-books-proxy.example.com'),
  path: '/books/{book}',
});

routes[0].grantInvoke(principal);

网络锁定 APIs

您可以为您的 WebSocket API 设置授权程序 $connect 用于控制访问您的 API 的路由.

Lambda 授权者

Lambda授权者使用 Lambda 函数来控制对您的 WebSocket API 的访问. 当客户端连接到您的 API时, API Gateway 引用了您的 Lambda 函数并使用响应来确定客户端是否能够访问您的 API .

import { WebSocketLambdaAuthorizer } from '@aws-cdk/aws-apigatewayv2-authorizers-alpha';
import { WebSocketLambdaIntegration } from '@aws-cdk/aws-apigatewayv2-integrations-alpha';

// This function handles your auth logic
declare const authHandler: lambda.Function;

// This function handles your WebSocket requests
declare const handler: lambda.Function;

const authorizer = new WebSocketLambdaAuthorizer('Authorizer', authHandler);

const integration = new WebSocketLambdaIntegration(
  'Integration',
  handler,
);

new apigwv2.WebSocketApi(this, 'WebSocketApi', {
  connectRouteOptions: {
    integration,
    authorizer,
  },
});

IAM 授权器

IAM授权程序可用于允许基于身份的访问您的WebSocket API.

import { WebSocketIamAuthorizer } from '@aws-cdk/aws-apigatewayv2-authorizers-alpha';
import { WebSocketLambdaIntegration } from '@aws-cdk/aws-apigatewayv2-integrations-alpha';

// This function handles your connect route
declare const connectHandler: lambda.Function;

const webSocketApi = new apigwv2.WebSocketApi(this, 'WebSocketApi');

webSocketApi.addRoute('$connect', {
  integration: new WebSocketLambdaIntegration('Integration', connectHandler),
  authorizer: new WebSocketIamAuthorizer()
});

// Create an IAM user (identity)
const user = new iam.User(this, 'User');

const webSocketArn = Stack.of(this).formatArn({
  service: 'execute-api',
  resource: webSocketApi.apiId,
});

// Grant access to the IAM user
user.attachInlinePolicy(new iam.Policy(this, 'AllowInvoke', {
  statements: [
    new iam.PolicyStatement({
      actions: ['execute-api:Invoke'],
      effect: iam.Effect.ALLOW,
      resources: [webSocketArn],
    }),
  ],
}));

版本与发布记录

@aws-cdk/aws-apigatewayv2-authorizers-alpha 共发布 169 个版本,首次发布于 2021/10/14;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.114.1-alpha.0latest2023/12/062 年前
2.114.0-alpha.02023/12/062 年前
2.113.0-alpha.02023/12/022 年前
2.112.0-alpha.02023/12/012 年前
2.111.0-alpha.02023/11/282 年前
2.110.1-alpha.02023/11/222 年前

关于 @aws-cdk/aws-apigatewayv2-authorizers-alpha 的常见问题

@aws-cdk/aws-apigatewayv2-authorizers-alpha 是什么?

此模块被贬值. 所有建筑现在都可以在aws-cdk-lib/aws-apigatewayv2授权器下使用

如何安装 @aws-cdk/aws-apigatewayv2-authorizers-alpha?

在项目目录运行 npm install @aws-cdk/aws-apigatewayv2-authorizers-alpha,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@aws-cdk/aws-apigatewayv2-alpha(2.114.1-alpha.0)、aws-cdk-lib(^2.114.1)、constructs(^10.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@aws-cdk/aws-apigatewayv2-authorizers-alpha 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aws-cdk/aws-apigatewayv2-authorizers-alpha 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@aws-cdk/aws-apigatewayv2-authorizers-alpha 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 14.15.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@aws-cdk/aws-apigatewayv2-authorizers-alpha 可以商用吗?

@aws-cdk/aws-apigatewayv2-authorizers-alpha 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@aws-cdk/aws-apigatewayv2-authorizers-alpha 的下载量有多少?

根据 npm 官方下载统计,@aws-cdk/aws-apigatewayv2-authorizers-alpha 在 2026/10/07 – 2026/11/05 这 30 天内被下载 86,271 次,日均约 2,876 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aws-cdk/aws-apigatewayv2-authorizers-alpha 还在维护吗?

最新版本 2.114.1-alpha.0 发布于 2023/12/06(2 年前);至今共发布 169 个版本,其中过去 12 个月发布了 0 个;首次发布于 2021/10/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。