添加无服务器 apis 作为资源服务器 AWS cognito AWS api 网关

adding serverless apis as a resource server AWS cognito AWS api gateway

您好,我正在使用无服务器 apis 使用 aws api 网关 lambda 代理、golang 和 aws cognito

   events:
      - http:
          path: myendpoint
          method: get
          cors: true
          authorizer:
            name: my-authorizer
            arn: {COGNITO_POOL_ARN}

plugins:
  - serverless-domain-manager

custom:
  customDomain:
    domainName: mydomain.com
    basePath: mybasepath
    stage: ${self:provider.stage}
    createRoute53Record: true

这允许我使用 ID 令牌向 mydomain.com/mybasepath/myendpoint 发出请求,我想让它更标准并使用访问令牌。

它不会获取访问令牌,API 网关授权者会将其退回。

我将此作为 Resource Server 添加到 Cognito 用户池设置

App client settings 我检查应用程序客户端的资源

我注销为用户创建一个新会话,新令牌,我会得到一个 401 Unathorized 我认为我正确地遵循了文档,因为它是 here 也许我遗漏了其他东西,或者可能因为它是无服务器的 api 它是我需要的不同设置。

非常感谢任何帮助或指导。

如果您只想使用 Cognito 保护 api,则无需创建范围。范围不向用户授予权限,而是向应用程序授予权限。

API Gateway Cognito 授权方基本上以三种模式运行:

  1. 允许 ID 令牌或访问令牌(未设置令牌验证且未在资源上设置范围)
  2. 允许 ID 令牌(令牌验证设置为 aud claim/application ID 且未在资源上设置范围)
  3. 允许访问令牌(未设置令牌验证,已在资源上设置范围)

这是以下每种情况的结果:

  1. ID 令牌和访问令牌均由 Cognito 签名密钥签名,因此授权方无法区分它们。
  2. 只有 ID 令牌包含 aud(受众)声明以执行令牌验证。
  3. 只有访问令牌包含 scope 声明以执行验证。

希望事情已经解决了。不要太在意示波器,除非您知道它们的用途。