标签: kong

如何将API网关与微服务和JWT结合使用?

下午你们都

只是想找人来仔细检查我的工作.以下是保护微服务的有效方法吗?

前提

将我们的单片应用程序和单一的Partner API分解为面向特定业务功能的微服务.它们很可能是在docker容器中运行的小型expressjs应用程序,在弹性beanstalk上,谁知道.他们会住在某个地方:)

我正在研究将Kong作为我的API网关或使用AWS API Gateway来封装我的微服务的细节.而且,它感觉很好.

Kong 的JWT插件将验证JWT的签名,然后将customer_id标题中的一行传递给微服务.我还要提一下,我们的第三方开发人员也将参与集成乐趣.这是我看到的事情的基本草图:

履行

  1. 为我们拥有的每个平台和第三方开发人员生成"消费者".(网络应用,移动应用,我们有目前的集成合作伙伴注:我不希望为登录的每个用户创建消费者虽然肯定更安全,这增加了大量的工作同样,如果你弄清楚.如何从我的API网关中获取秘密我明显有其他问题)
  2. 让孔验证对我的要求.有点像门口的保镖,没有授权,只是认证.
  3. 我并不需要知道令牌是有效的,一旦它到达微服务,我可以使用一些中间件将其解码并使用自定义逻辑来决定是否该用户真正应该做的是什么,他们正在试图做的.

额外的东西

  • Kong有一个很好的访问控制插件.我们的应用程序和移动应用程序将以"上帝"权限运行,但我绝对可以将开发人员锁定到特定的路由和方法.

  • 撤销第三方访问将很容易,撤销最终用户访问将不会那么简单,除非我愿意通过生成新秘密立即使所有JWT无效.也许我可以限制令牌时间为10分钟左右,使我们的应用程序会检查他们是否过期,得到一个新的令牌,然后与原始请求得到.这样我就可以在数据库或其他东西中"标记"它们,而不是让JWT生成.

  • 在任何地方都使用SSL,JWT存储在Web浏览器中仅限SSL的cookie中,并且在任何声明中都没有存储敏感信息.

多谢你们.

security api jwt microservices kong

19
推荐指数
1
解决办法
3454
查看次数

Tyk和Kong之间是否有全面的比较?

我一直在开发微服务(Spring Cloud)一段时间(〜2年)并且大量使用Netflix Zuul.虽然它提供了许多功能和强大功能,但我的开发人员仍然想知道替代方案,并了解了Tyk和Kong.

从个人文档和博客中读取,我或多或少地了解它们都提供了类似的功能.我想知道两者之间的全面比较,以及您实施的任何实际示例都将是一个很好的帮助理解.

kong tyk api-gateway

14
推荐指数
3
解决办法
5601
查看次数

在反向代理后面使用Keycloak:无法打开管理员登录页面,因为混合内容

所以我有一个问题,让keycloak 3.2.1在kong(0.10.3)后面工作,这是一个基于nginx的反向代理.

场景是:

我通过我的网关路由来呼叫keycloak https://{gateway}/auth,它向我显示带有keycloak徽标的入口点,链接到管理控制台等 - 到目前为止一切都很好.

但是当点击管理控制台 - >调用时https://{gateway}/auth/admin/master/console/,keycloak尝试通过http加载其css/js(参见下面的screenie),我的浏览器因为混合内容而阻止了.

我四处搜索并找到了这个帖子:keycloak apache服务器配置带有'混合内容'问题导致这个github repo:https://github.com/dukecon/keycloak_postgres_https

从那时起,我尝试将其cli成功集成到我的dockerfile中(没有更改文件的内容,只是将它们复制到我的repo中并从dockerfile添加/运行它们).这是我的dockerfile现在:

FROM jboss/keycloak-postgres:3.2.1.Final

USER root

ADD config.sh /tmp/
ADD batch.cli /tmp/

RUN bash /tmp/config.sh

#Give correct permissions when used in an OpenShift environment.
RUN chown -R jboss:0 $JBOSS_HOME/standalone && \
    chmod -R g+rw $JBOSS_HOME/standalone

USER jboss
EXPOSE 8080
Run Code Online (Sandbox Code Playgroud)

可悲的是,我的问题仍然存在: 错误

所以我现在没有想法,希望你能帮助我:

  • 如何告诉keycloak在这里通过https调用'css-files?

  • 我是否需要更改cli脚本中的内容?

这是脚本的内容:

config.sh:

#!/bin/bash -x

set -e

JBOSS_HOME=/opt/jboss/keycloak
JBOSS_CLI=$JBOSS_HOME/bin/jboss-cli.sh
JBOSS_MODE=${1:-"standalone"}
JBOSS_CONFIG=${2:-"$JBOSS_MODE.xml"}

echo "==> Executing..."
cd /tmp

$JBOSS_CLI --file=`dirname …
Run Code Online (Sandbox Code Playgroud)

ssl https openshift keycloak kong

14
推荐指数
5
解决办法
2万
查看次数

Netflix-Zuul vs Mashape-Kong

Zuul和kong都是微服务架构中的一个很好的API网关层.这两者之间有什么重要的区别?

mashape microservices kong netflix-zuul

13
推荐指数
1
解决办法
7946
查看次数

如何使用 docker 在 alpine 图像上以 root 用户身份运行 bash?su: 必须是 suid 才能正常工作

编辑: 答案很清楚。--user root进入容器时可以使用旗帜。

docker exec -it --user root mycontainername bash                 or sh
Run Code Online (Sandbox Code Playgroud)

我刚刚为服务(Kong API 网关)下载了这个官方 docker hub 的 1.5.0-alpine 映像,现在我无法运行 apk 命令来安装 nano,例如。

之前,我只需要进入容器

docker exec -it kong sh 
Run Code Online (Sandbox Code Playgroud)

或者

docker-compose exec kong sh
Run Code Online (Sandbox Code Playgroud)

并且我能够运行诸如apk update或 之类的命令apk add nano

但现在我收到这些错误

$ apk update                                                                                                                                   
ERROR: Unable to lock database: Permission denied                                                                                                
ERROR: Failed to open apk database: Permission denied

$ apk add nano
ERROR: Unable to lock database: Permission denied
ERROR: Failed to open apk …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose kong

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

使用 kong ingress 时出现错误 {"message":"failure to get a Peer from the Ring-Balancer"}

当我尝试使用公共IP访问时收到错误消息:

"{"message":"failure to get a peer from the ring-balancer"}"
Run Code Online (Sandbox Code Playgroud)

看来Kong无法提供上游服务。

我正在使用投票应用程序

入口.yaml

"{"message":"failure to get a peer from the ring-balancer"}"
Run Code Online (Sandbox Code Playgroud)

服务.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: telehealth-ingress
  namespace: kong
  annotations:
    kubernetes.io/ingress.class: "kong"
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: voting-service
          servicePort: 80
Run Code Online (Sandbox Code Playgroud)

部署.yaml

apiVersion: v1
kind: Service
metadata:
  name: voting-service
  labels:
    name: voting-service
    app: voting-app
spec:
  ports:
    - targetPort: 80
      port: 80
  selector:
    name: voting-app-pod
    app: voting-app
Run Code Online (Sandbox Code Playgroud)

kubernetes kong kubernetes-ingress kong-ingress

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

Kong和JWT没有创造消费者

我目前正在使用Kong API Gateway,我想用它来验证网关用户的身份验证,并在用户未正确登录时限制对服务的访问.我有一个身份验证服务,只要用户登录就会发出JWT.

我现在想与Kong分享JWT秘密并将其用于验证已发布的JWT以保护需要适当身份验证的服务.

我看了一下这个插件:https://getkong.org/plugins/jwt/

但似乎这个插件的工作方式与我想要实现的有点不同.为什么我要创建消费者?我希望在我的身份验证服务中只有一个用户数据库,以避免需要同步.看来这个插件的方法是为了让第三方利益相关者访问我的API.

任何提示都将受到高度赞赏.

jwt kong

7
推荐指数
2
解决办法
5316
查看次数

怎么开始金刚?

当我尝试在 Ubuntu 中启动 Kong 时出现以下错误

kong start [-c /path/to/kong.conf]
prefix directory /usr/local/kong not found, trying to create it
2017/11/05 21:11:41 [warn] ulimit is currently set to "1024". For better performance set it to at least "4096" using "ulimit -n"
Error: /usr/local/share/lua/5.1/pgmoon/init.lua:271: missing password, required for connect
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

ubuntu postgresql-9.4 kong

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

如何将自定义 kong 插件添加到 dockerized kong

我有一个 KONG 容器正在运行,我想向其中添加一个自定义插件,特别是JWT Crafter。我已经下载了插件,但我不知道如何让它从我的 KONG 容器开始。所以请如果有人进入相同的位置或知道任何可遵循的路线,这将非常有帮助。

docker dockerfile kong api-gateway

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

将 kong.yml 中的环境变量与 Kong 和 Docker-compose 一起使用

我正在尝试通过 kong.yml 文件以声明方式使用 Kong。我希望能够在 kong.yml 文件中使用环境变量。我的 docker-compose 中有以下内容:

kong: 
    image: kong:2.7.0-alpine
    restart: "always"
    hostname: kong
    container_name: kong
    networks:
      - kong-net
    environment:
      KONG_DATABASE: "off"
      KONG_PROXY_ACCESS_LOG: /dev/stdout
      KONG_PROXY_ERROR_LOG: /dev/stderr
      KONG_ADMIN_ACCESS_LOG: /dev/stdout
      KONG_ADMIN_ERROR_LOG: /dev/stderr
      KONG_ADMIN_LISTEN: "0.0.0.0:8001, 0.0.0.0:8444 ssl"
      KONG_DECLARATIVE_CONFIG: "/opt/kong/kong.yml"
      ADMIN_MICROSERVICE_PORT: ${ADMIN_MICROSERVICE_PORT}
      REPORTING_MICROSERVICE_PORT: ${REPORTING_MICROSERVICE_PORT}
      INTERNAL_IP: ${INTERNAL_IP}
    command: "kong start --v"
    ports: 
      - "${INTERNAL_IP}:8000:8000"
      - "${INTERNAL_IP}:8443:8443"
      - "${INTERNAL_IP}:8001:8001"
      - "${INTERNAL_IP}:8444:8444"
    volumes:
      - ./kong/config:/opt/kong
Run Code Online (Sandbox Code Playgroud)

还有一个 kong.yml 文件:

_format_version: "2.1"
_transform: true


services:
- name: controllers
  url: https://${INTERNAL_IP}:${ADMIN_MICROSERVICE_PORT}
  routes:
  - name: controller-routes
    paths:
    - /admin/controllers 

- …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose kong

7
推荐指数
0
解决办法
1403
查看次数