У меня есть одностраничное приложение, встроенное в Vue.js 2.5, которое также поддерживает OAuth2.0 с использованием IdentityServer4 + vuex-oidc и работает на сервере nginx.Все с моей настройкой работает нормально, когда запускает приложение на webpack dev server , но в версии выпуска есть проблема с циклом перенаправления, которая, я подозреваю, может быть связана с неправильной настройкой nginx.
Проблема: Поведение цикла перенаправления всегда одинаково
- Пользователь запрашивает навигацию к / app
- Плагин oidc перенаправляет на / connect /авторизировать? ...
- перенаправить в / app / oidc-login (uri перенаправления запроса авторизации)
- перенаправить в / app (вернуться к шагу 2)
Для сервера dev я использую обратный прокси, настроенный как
location /app {
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass https://127.0.0.1:55100;
proxy_temp_path C:/myapp/nginxRP;
}
Но так как я использую режим истории в маршрутизаторе, версия выпуска настроена в соответствии с https://router.vuejs.org/guide/essentials/history-mode.html#example-server-configurations
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
location /app {
try_files $uri $uri/ /index.html;
}
Где версия выпуска приложения (index.html и статические файлы) находится по адресу .. \ nginx \ html \ app
Вот моя конфигурация vue-router
const router = new Router({
mode: "history",
base: "/app/",
routes: [
{
path: "/oidc-login",
name: "oidcCallback",
component: OidcCallback,
meta: {
isOidcCallback: true,
isPublic: true
}
},
{
path: "/oidc-silent-login",
name: "oidcSilentCallback",
component: OidcSilentCallback,
meta: {
isOidcCallback: false,
isPublic: true
}
},
{
path: "/",
name: HOME_PAGE_TITLE,
component: Main
},
{
path: "*",
name: "Page Not Found",
component: NotFound
}
]
});
И компоненты OidcCallback
<template>
<div></div>
</template>
<script>
import { mapActions } from "vuex";
import { OIDC_MODULE_NAMESPACE } from "../../store/store";
export default {
name: "OidcCallback",
methods: {
...mapActions(OIDC_MODULE_NAMESPACE, [
"oidcSignInCallback"
])
},
mounted () {
this.oidcSignInCallback()
.then((redirectPath) => {
this.$router.push(redirectPath);
})
.catch((err) => {
console.error(err);
this.$router.push("/signin-oidc-error"); // TODO
});
}
};
</script>
Я настроил vuex-oidc в точности так, как указано в https://github.com/perarnborg/vuex-oidc/wiki#how-to-implement-vuex-oidc, за исключением того, что я динамически добавляю модуль oidcStore в vuex.
Так как на сервере dev все работает, и я уже думаю, что это проблема nginx, яне уверен, что другие части моего кода / настройки будут полезны, но, пожалуйста, дайте мне знать, если я что-то упустил, и я поделюсь с вами еще.
Спасибо