当前位置:   article > 正文

vue项目使用oidc-client实现单点登陆

oidc-client

vue项目使用oidc-client实现单点登陆

1、单点登录所需配置项:oidc.js

  1. export const identityServerBase = 'http://baidu.com';//目标服务器登录地址
  2. export const vueBase = 'http://localhost:8080'
  3. // 参考文档 https://github.com/IdentityModel/oidc-client-js/wiki
  4. export const openIdConnectSettings = {
  5.     authority: `${identityServerBase}`,
  6.     client_id: `vue-client`,
  7.     redirect_uri: `${vueBase}/signin-oidc`,//这里是跳转回来的路由
  8.     post_logout_redirect_uri: `${vueBase}`,
  9.     silent_redirect_uri: `${vueBase}/redirect-silentrenew`,
  10.     scope: 'openid profile api1',
  11.     response_type: `id_token token`,
  12.     automaticSilentRenew: true,
  13. };

2、我们需要在路由钩子页面增加判断,如果没有token,则重定向到服务器进行单点登录

permission.js

  1. import router from "./router";
  2. import Oidc from "oidc-client";
  3. import { openIdConnectSettings } from "./oidc";
  4. router.beforeEach((to,from,next)=>{
  5. //有token或者跳转到回调页面则直接执行
  6.    if(localStorage.getItem('token') || to.path == '/callback'){
  7.       next()
  8.    }else{
  9.       let mgr = new Oidc.UserManager(openIdConnectSettings);
  10.       mgr.signinRedirect(); //执行重定向 
  11.    }
  12. })

这个是我自己的项目这样用router钩子来判断权限,如果你们没有用到也没关系,忽略掉router,直接执行else中的内容,如果没有token,页面会跳转到服务器进行登录

3、下面是登录完成后会回到我们系统中的操作

callback.vue(登录成功的回调页面)

  1. <template>
  2.     <div></div>
  3. </template>
  4. <script>
  5. import Oidc from "oidc-client";
  6. import { openIdConnectSettings} from '../oidc.js'
  7. export default {
  8.     props: {},
  9.     data() {
  10.         return {};
  11.     },
  12.     components: {},
  13.     methods: {},
  14.     created() {
  15.         let userManager = new Oidc.UserManager(openIdConnectSettings);
  16.         userManager.signinRedirectCallback().then(() => {
  17. userManager.getUser().then((user) => {
  18. if(user){
  19. localStorage.setItem('userInfo',JSON.stringify(user));
  20. localStorage.setItem('token', user.access_token);
  21. this.$router.push("/home");
  22. }else{
  23. userManager.signinRedirect(); //执行重定向
  24. }
  25. })
  26. })
  27. .catch(function(e) {
  28. console.error("CallBack 错误信息" + e);
  29. });
  30.     }
  31. };
  32. </script>

4、执行回调后,跳转到home页面(系统首页),至此整体流程结束。

源码地址: https://gitee.com/maxiaoqu/vue-oidc
参照网址:https://blog.csdn.net/qq_39771254/article/details/107672684

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/224562
推荐阅读
相关标签
  

闽ICP备14008679号