@aws-cdk/aws-apigatewayv2-authorizers

中文文档
1.204.0发布于 2023/06/20Apache-2.0TypeScriptCommonJS近 30 天下载 4693

AWS APIGateway V2 授权器

此软件包已被标记为弃用

AWS CDK v1 has reached End-of-Support on 2023-06-01. This package is no longer being updated, and users should migrate to AWS CDK v2. For more information on how to migrate, see https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html

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

AWS APIGatewayv2 授权器


End-of-Support

AWS CDK v1在2023-06-01上达到了支持结束. 此软件包不再更新,用户应该迁移到 AWS CDK v2.

关于如何移徙的更多信息,请参见: 移动到 AWS CDK v2 指南。 。 。 .


目录

导言

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

HTTP API 软件

Http Apis 的访问控制是通过限制哪些路线可以被引用来管理.

授权器和范围可以应用到api上,也可以具体应用于每个路线.

默认授权

当使用默认授权时, api 的所有路径都会继承配置 .

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

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

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 将要求[写:书]范围
  • POST /login 删除默认授权者( 未认证的路由)
import { HttpJwtAuthorizer } from '@aws-cdk/aws-apigatewayv2-authorizers';
import { HttpUrlIntegration } from '@aws-cdk/aws-apigatewayv2-integrations';

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.myproxy.internal'),
  path: '/books',
  methods: [apigwv2.HttpMethod.GET],
});

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

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

api.addRoutes({
  integration: new HttpUrlIntegration('LoginIntegration', 'https://get-books-proxy.myproxy.internal'),
  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';
import { HttpUrlIntegration } from '@aws-cdk/aws-apigatewayv2-integrations';

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.myproxy.internal'),
  path: '/books',
  authorizer,
});

用户池授权器

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

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

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

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.myproxy.internal'),
  path: '/books',
  authorizer,
});

Lambda 授权者

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

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

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

// 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.myproxy.internal'),
  path: '/books',
  authorizer,
});

IAM 授权者

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

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

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.myproxy.internal'),
  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';
import { WebSocketLambdaIntegration } from '@aws-cdk/aws-apigatewayv2-integrations';

// 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,
  },
});

版本与发布记录

@aws-cdk/aws-apigatewayv2-authorizers 共发布 133 个版本,首次发布于 2021/02/18;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.204.0latest2023/06/203 年前
1.203.02023/06/013 年前
1.202.02023/05/223 年前
1.201.02023/05/113 年前
1.200.02023/04/273 年前
1.199.02023/04/213 年前

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

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

AWS APIGateway V2 授权器注意:该包已被作者标记为弃用——AWS CDK v1 has reached End-of-Support on 2023-06-01. This package is no longer being updated, and users should migrate to AWS CDK v2. For more information on how to migrate, see https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html

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

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

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

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

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

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

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

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

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

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

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

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

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

最新版本 1.204.0 发布于 2023/06/20(3 年前);至今共发布 133 个版本,其中过去 12 个月发布了 0 个;首次发布于 2021/02/18。作者已将其标记为弃用,新项目建议寻找替代方案。