Перемещение приложения Monolith ASP.NET Webform на микросервисы и управление сессиями - PullRequest
0 голосов
/ 04 декабря 2018

Мы работаем над переносом нашего монолитного приложения ASP.NET Webform на Microservices, для начала мы используем Nginx в качестве прокси-маршрутизатора и Node express в качестве шлюза API.Из браузера любой запрос .aspx будет перенаправлен в существующее приложение ASP.NET Webform из Nginx, а новые вызовы будут перенаправлены на API-шлюз. До тех пор, пока все маршрутизация не будет работать нормально, но проблема заключается в управлении сессиями, приложение ASP.NET Webform использует Redis какхранилище сеансов и тот же сеанс, к которому мы пытаемся получить доступ к шлюзу API. ASP.NET хранит sessionID в файле cookie «ASP.NET_SessionId» и в Redis создает два ключа для сеанса, например SessionID_Data SessionID_Internal. Мы пытались установить сеанс Express-redis на один и тот же«ASP.NET_SessionId» в шлюзе, но он создает другой ключ, чем мы пытались получить значение cookie и пытались сгенерировать тот же идентификатор в API-шлюзе

enter code here
    app.use(session({
      genid: function(req) {
        //Get SessionID from Cookie and Return
  },
      store: new RedisStore({
       host:HOST,
       port:PORT,
       pass:PASSWORD,
       prefix: APP_PREFIX //Application Prefix used by ASP.NET
      }),

      name: 'ASP.NET_SessionId',
      secret: APP_SECRET,
      resave: false,
      saveUninitialized: false
    }));

Проблема в том, что ASP.NET создает два ключа в Redis впользовательский сеанс, так же, мы не можем установить шлюз API

. Есть ли какой-либо способ поделиться сеансом веб-формы ASP.NET в API-шлюзе или если мы создадим аутентификацию и управление сеансом как отдельный микросервис, то этот сеанс можно использовать воба ASP.NET веб-форма и API-шлюз, который будет автоматически увеличивать TTL Redis Keys при каждом запросе?

1 Ответ

0 голосов
/ 25 июня 2019

Для доступа к сеансу ASP.NET в Node API gateway мы создали промежуточное программное обеспечение, и с помощью библиотеки «ioredis» мы подключаемся к базе данных сеансов Redis, которая будет использоваться сеансом Redis ASP.NET.Для правильной синхронизации шлюза API узла с сеансом ASP.NET Redis необходимо выполнить

1. В промежуточном программном обеспечении прочитайте ключ сеанса из файла cookie let cookieSessionID=req.cookies["ASP.NET_SessionId"];

2. Добавьте _Internal ({sessionID_Internal}) к идентификатору сеанса и проверьте, не истек ли он в Redis, с помощью метода ioredis существующего

3. Если сеанс существует, обновите время жизни обоих_Internal и _data ключи сеанса ASP.NET (в ioredis вы можете установить срок действия ключа методом expire())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...