小编Emi*_*aas的帖子

如何将 API 请求 (AWS SigV4) 签署到代理和 API 网关后面的 Lambda?

我正在开发一个项目,目前我们使用 Cognito 用户池进行身份验证,但经过一些研究,我们发现如果我们想要更细粒度的访问控制,我们应该使用身份池。

理论很简单:首先我们创建一个身份池,使用 Cognito 用户池作为身份验证提供者。然后在 API Gateway 中我们设置 Lambda 以使用Authorizer: AWS_IAM. 要访问它,用户现在必须:

  1. 登录用户池,这将为用户提供 JWT 令牌。
  2. 将该 JWT 令牌与身份池交换为临时 AWS 凭证。
  3. 使用这些新凭证向受保护的 Lambda 签署 API 请求。

第 1 步和第 2 步工作正常,通过测试用户,我们设法获取 JWT 令牌并成功将其交换为 AWS 凭证。它们看起来像这样(出于安全原因进行了修改):

awsAccessKey: ASIAZFDXSW29NWI3QZ01

awsSecretKey: B+DrYdPMFGbDd1VRLSPV387uHT715zs7IsvdNnDk

awsSessionToken: IQoJb3JpZ2luX2VjEA8aCWV1LXdlc3QtMyJHMEUCIQC4kHasZrfnaMezJkcPtDD8YizZlKESas/a5N9juG/wIQIgShWaOIgIc4X9Xrtlc+wiGuSC1AQNncwoac2vFkpJ3gkqxAQIWBAAGgw2NTI5NTE0MDE0MDIiDDuTZ1aGOpVffl3+XCqhBDmjCS3+1vSsMqV1GxZ96WMoIoEC1DMffPrBhc+NnBf94eMOI4g03M5gAm3uKAVCBkKO713TsQMaf4GOqqNemFC8LcJpKNrEQb+c+kJqqf7VWeWxveuGuPdHl1dmD2/lIc8giY0+q4Wgtbgs6i0/gR5HzdPfantrElu+cRNrn/wIq4Akf+aARUm14XsIgq7/1fT9aKSHpTgrnTLHeXLKOyf/lZ947XdH71IHDZXBUdwdPikJP/Rikwill6RRTVw7kGNOoacagCmmK7CD6uh9h0OnoW3Qw5df+zX5Z8U7U55AyQfEyzeB7bW3KH65yJn6sopegxIIFfcG2CLIvtb5cZYImAz/4BdnppYpsrEgLPUTvRAXn6KUa5sXgc5Vd7tJeRo5qpYckrR2qfbebsU+0361BCYK2HxGJqsUyt1GVsEoAosxofpn/61mYJXqfeR0ifCAgL7OMOquvlaUVXhHmnhWnUSIOUQ+XtRc+DxUDjwn5RPD7QTwLHIat7d4BI4gZJPAcMT9gZrBVO/iN88lk5R0M5LBzFwd5jiUW46H/G755I4e5ZHaT1I37TY3tbcObIFGVVNz5iHDpK/NePTJevKTshe8cYxXczOQgos4J/RsNpqouO9qRgT9JDyXjU3Etyxqm9RzbLYgV3fl5WwZl5ofVmrBsy3adq+088qEz5b9cogPgDggA/nQaPv7nAZHT8u0ct/hw230pmXUDGCutjOML2G6ZYGOoUCy+BitAN0SZOYWlbZlYomIGKMNQuXjV4z+S9CEW8VunqW4Rgl7rTba6xbI0DdX9upYEczeln6pTl+2UPEDYf6usayFfMsGDvJXesqC5EOtWco1Z8tem/wDQIH7ZbioQHZ7UJDd5ntUAruFveY7sXmKsQbtah/RB5W5HLYy19hCmyGpYMnVXxR0FcNGImsweNcprtw9MmQqy2SUK9V6Rwn1yIE6svfAT3NVyzp9ILbP/qSQLGHNhm4CNd8+EJZZa9rcmCbQiQ+iBJ8FW+AmRSCC4LiB1dhuH1KsFo88DyNhYdVf3py8XV4CDR7l+UyuZMrIQsERwx9JzwVBjfv9COT948mvyGTY
Run Code Online (Sandbox Code Playgroud)

问题是签字。我们的 Lambda 位于 CloudFront 代理 + API 网关后面。对eg 的请求john.dev.project.io将转发至位于 的“真实”API 源api.dev.project.io

使用 Postman 和设置AWS Signature,请求不起作用并给出以下错误:

The request signature we calculated does not match the signature you provided. Check your AWS Secret …
Run Code Online (Sandbox Code Playgroud)

amazon-cloudfront aws-lambda aws-api-gateway aws-signature aws-identitypools

7
推荐指数
1
解决办法
2034
查看次数

如何在 Gitlab CI 管道上运行 Flutter 集成测试?

我正在开发一个 Flutter 项目,需要在 Gitlab CI 管道上运行集成测试。

测试在本地运行良好,启动chromedriver -port=4444然后flutter drive --driver=integration_test/test_driver/integration_test.dart --target=integration_test/integration/app_test.dart.

但是,我无法让它们在 CI 中运行。我的 yaml 文件如下所示:

...

test_ui_integration:
  needs: 
    - build_deploy_user_service
    - populate_db
  tags:
    - docker
  stage: test_ui_integration
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      when: always
  before_script:
    - chromedriver --port=4444 & # launching the chromedriver
    - sleep 10
  script:
    - cd $CI_PROJECT_DIR/ui
    - npm ${NODE_INSTALL_OPTIONS:-i}
    - npm run build
    - flutter drive --driver=integration_test/test_driver/integration_test.dart --target=integration_test/integration/app_test.dart -d chrome --web-run-headless --headless
    # - flutter drive --driver=integration_test/test_driver/integration_test.dart --target=integration_test/integration/app_test.dart  -d web-server …
Run Code Online (Sandbox Code Playgroud)

continuous-integration gitlab-ci flutter flutter-test flutter-web

5
推荐指数
1
解决办法
1370
查看次数

如何插入 nuxt-link 的 `to` 属性?

我已经搜索了一段时间但似乎无法找到正确的答案。我有一个基本的 Nuxt 项目,具有以下目录结构(忽略fun.vue):

目录结构

这个想法是能够导航到具有以下路径的单个帖子http://localhost:3000/posts/1

这是可行的,如果我手动转到.../posts/1我的页面,则定义在_id.vue.

问题是,在我的索引页面中,我无法进入<NuxtLink>单个帖子页面。我有一个基本的 v-for 循环遍历我获取的 posts 数组,如下所示:

<template>
  <div>
    <div v-for="post in posts" :key="post.id">
      {{ post.title }}
      <NuxtLink to="`posts/${post.id}`">Link to post</NuxtLink>
    </div>
  </div>
</template>
Run Code Online (Sandbox Code Playgroud)

例如,我希望在单击第二篇文章的链接后导航到posts/2,但我得到的是/%60posts/$%7Bpost.id%7D%60。为什么模板字符串不能正常转换?我也尝试过使用计算值,但没有成功,并且 Nuxt 路由文档也没有多大帮助。

非常感谢任何与此相关的帮助。

vue.js nuxt.js

2
推荐指数
1
解决办法
3189
查看次数