Убедитесь, что запрос поступает из другого контейнера в сети в docker -compose - PullRequest
0 голосов
/ 24 января 2020

Иногда простая задача кажется более сложной. Это то, с чем я сталкиваюсь сейчас.

Я занимаюсь разработкой API электронной коммерции. Приложение имеет микросервисную архитектуру. Итак, Order, Product, Payment и Auth - это разные микроуслуги. У каждого своя база данных.

Эти микроуслуги общаются друг с другом через http restful apis. Поэтому, если пользователь размещает заказ, он обращается к микросервису оплаты, чтобы получить сгенерированную контрольную сумму, чтобы он мог произвести оплату. Платежный микросервис обращается к Order для размещения заказа.

Заказ микросервис размещает заказ и возвращает детали к оплате. Нет проблем.

Но после размещения заказа количество товара должно быть уменьшено. У меня нет API для уменьшения количества продукта. Я не хочу иметь его.

Потому что, продукт может быть изменен только его поставщиком. Поставщик, действительно, может изменить свой продукт, но для этого он передает свой jwt.

Если я создаю API для изменения количества продукта, любой может нажать на API и уменьшить количество.

Таким образом, одним из решений может быть API, который доступен только для микросервисов.

Как узнать, что вызов поступает от микросервиса?

Должен ли я создать hash и передать это во время взаимодействия с другим микросервисом?

Docker -compose.yml


    version: '3'
services:
  users:
    build: './users'
    ports:
      - '4001:3000'
    volumes:
      - './users:/src/'
  products:
    build: './products'
    ports:
      - '4002:3000'
    volumes:
      - './products:/src/'
  orders:
    build: './orders'
    ports:
      - '4003:3000'
    volumes:
      - './orders:/src/'
  payments:
    build: './payments'
    ports: 
      - '4004:3000'
    volumes: 
      - './payments:/src/'

Dockerfile

#User node js official image as a parent image
FROM node

ADD package.json /tmp/package.json

RUN cd /tmp && npm install

RUN mkdir -p /src && cp -a /tmp/node_modules /src/

COPY . /src

WORKDIR /src

RUN npm install

EXPOSE 3000

CMD npm start

1 Ответ

0 голосов
/ 24 января 2020

Я собираюсь дать более широкий взгляд на проблему.

То, что вы пытаетесь сделать, может быть решено с помощью RBA C (управление доступом на основе ролей), которое требуется любому приложению с другой категорией пользователей и правами доступа. В вашем случае в описании присутствуют три категории пользователей

  1. Покупатели
  2. Поставщики
  3. Администратор

Каждая категория пользователей имеет Другой набор прав доступа покупатели, по крайней мере, для всех администраторов доступа.

Общая идея заключается в том, что когда пользователь аутентифицируется, он получает токен, основанный на том, к какой группе он принадлежит. Токен содержит права доступа. Токен передается всем последующим конечным точкам API. Маркер определяет, на что способен пользователь. Так что в вашем случае, если у службы продукта есть конечная точка для сокращения количества, только администратор или поставщик будет иметь разрешение на это. Вы можете использовать основанную на OAuth структуру авторизации.

Ссылки

...