Я реализую identity server 4
с vue js
на стороне клиента.
В настоящее время у меня есть только логин администратора в приложении с паролем и именем пользователя.
У меня нет общедоступного сайта, с которого ПОЛЬЗОВАТЕЛЬ перенаправляется для входа в систему. Я хотел, чтобы пользователь перенаправлялся на страницу входа напрямую, когда он нажимал URL-адрес клиента приложения.
В настоящее время в пробной версии identity server 4
пользователю необходимо нажать кнопку входа в систему на панели навигации и перенаправить его для входа.
Я хотел сделать следующими способами:
- Клиент Нажмите URL. Проверьте, аутентифицирован ли пользователь или нет.
- Перенаправление на сервер идентификации.
- Войти с помощью имени пользователя/пароля
- Перенаправление на клиентский портал после успешного входа в систему.
Мне очень трудно интегрировать этот подход в vue js
.
В моей текущей реализации приложение всегда работает в цикле и всегда перенаправляется для входа.
store.getters.isAuthenticated
никогда не бывает истинным и всегда перенаправляет приложение с помощью SignIn.
Я не мог понять, пропустил ли я что-то в своем router.beforeEach
или что-то в реализации oidc
.
Маршруты:
export const routes = [
{
component: Full,
path: "/",
meta: {
requiresAuth: true
},
children: [
{
path: "/dashboard",
name: "Dahboard",
component: DashboardView,
meta: {
requiresAuth: true
}
},
{
path: "/signin",
component: Signin
},
{
path: "/company",
component: Company,
meta: {
requiresAuth: true
}
}
]
}
];
import Vue from "vue";
import VueRouter from "vue-router";
import { routes } from "./routes";
import store from '../store'
Vue.use(VueRouter);
let router = new VueRouter({
mode: "history",
routes
});
export default router;
router.beforeEach((to, from, next) => {
if (store.getters.isAuthenticated) {
const notValid = ['/signin', '/signup']
if (notValid.lastIndexOf(to.path) >= 0) {
next({
path: '/dashboard'
})
} else if (to.path === '/signout') {
store.commit('removeAuthentication')
next({
path: '/'
})
} else {
next()
}
} else if (to.matched.some(record => record.meta.requiresAuth)) {
next({
path: '/signin',
query: {
redirect: to.fullPath
}
})
} else if (to.path === '/signout') {
next({
path: '/'
})
} else {
next()
}
})
Компонент входа:
import authService from './authService';
export default {
name: 'Auth',
mounted() {
authService.login();
authService.completeLogin();
}
};
Config.js
export default {
authority: "https://localhost:44350",
client_id: "js",
redirect_uri: `${domain}/signin`,
response_type: "id_token token",
scope:"openid profile api1",
post_logout_redirect_uri : `${domain}`,
silent_redirect_uri: `${domain}/silent.html`,
}
Логин: this.userManager.signinRedirect()
полныйЛогин: this.userManager.signinRedirectCallback()
Тихий.html:
new Oidc.UserManager().signinSilentCallback()
.catch(function (error) {
console.error(error);
});
openid-connect
(протокол реализует сервер Identity) иoidc-client
библиотекой, которую вы используете на стороне SPA. - person mode777   schedule 07.04.2018