【问题标题】:adding serverless apis as a resource server AWS cognito AWS api gateway添加无服务器 api 作为资源服务器 AWS cognito AWS api 网关
【发布时间】:2021-01-29 14:21:50
【问题描述】:

您好,我正在使用使用 aws api gateway lambda 代理、golang 和 aws cognito 的无服务器 API

   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 Gateway 授权者会反弹它。

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

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

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

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

【问题讨论】:

    标签: amazon-cognito serverless-framework serverless


    【解决方案1】:

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

    API Gateway Cognito Authorizer 基本上以三种模式运行:

    1. 同时允许 ID 令牌或访问令牌(资源上没有设置令牌验证和范围)
    2. 允许 ID 令牌(令牌验证设置为 aud 声明/应用程序 ID 并且没有在资源上设置范围)
    3. 允许访问令牌(未设置令牌验证,在资源上设置范围)

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

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

    希望能解决问题。除非您知道自己的用途,否则不要对示波器过于执着。

    【讨论】:

    • 感谢您的回答,当我在请求中发送访问令牌时,API 网关授权方拒绝请求并拒绝 401 访问。我将在哪里指定授权人接受的令牌类型?还是改变它的操作模式?提前致谢,
    • @FranciscoArias 要专门允许访问令牌,请确保您没有在授权人上设置令牌验证。然后在 API 资源上设置范围。
    • 谢谢,是的,这就是我需要做的,我找到了文档docs.aws.amazon.com/apigateway/latest/developerguide/… 如果你使用的是无服务器框架,你将需要这个插件serverless.com/plugins/serverless-oauth-scopes 再次感谢兄弟
    猜你喜欢
    • 1970-01-01
    • 2021-04-27
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多