前端使用keycloak

775 阅读2分钟

一、下载和安装

下载和安装vue-keycloak-js

cnpm i --save @dsb-norge/vue-keycloak-js

二、引入和使用

1.main.js中引用

首先需要引入vue-keycloak-js

兼容ie 可以安装固定版本号1.0.0 高版本不支持ie

import keycloak from '@dsb-norge/vue-keycloak-js';

生产环境在.env.production配置 开发环境在.env.development配置

例如:

VUE_APP_KEYCLOAK_URL= http://localhost:8080/auth/********

/ ***** 换成自己的key cloak 地址 /***

VUE_APP_KEYCLOAK_REALM= "master"****

VUE_APP_KEYCLOAK_CLIENTID= "demo"****

VUE_APP_KEYCLOAK_ONLOAD='login-required'****

VUE_APP_ 开头****

#两个VUE_APP_KEYCLOAK_ONLOAD切换注销 重启尝试****

# check-sso 不是每一页都要登录 需要权限配置****

# login-required 每一页都要登录**** Vue . use(keycloak, {

  init: {

    onLoad: process . env . VUE_APP_KEYCLOAK_ONLOAD,

    checkLoginIframe: false //防止登陆后重复刷新

  },

  config: {

    "realm": process . env . VUE_APP_KEYCLOAK_REALM,

    "url": process . env . VUE_APP_KEYCLOAK_URL, //auth-server-url

    "clientId": process . env . VUE_APP_KEYCLOAK_CLIENTID, //resource

  },

  onReady: (keycloak) => {

    new Vue({

      router,

      store,

      render: (h) => h(App),

    }) . $mount("#app");

  }

}); 2. 退出登录和获取用户信息 vue-keycloak-js提供了全局的$keycloak函数,我们可以用下面的方法退出keycloak

//获取用户信息可以使用

this.$keycloak.loadUserProfile()

//退出登录使用

this.$keycloak.logoutFn()

demo

token:{{ $keycloak . token}}

    

userName:{{ $keycloak . userName}}

    <el-button @click=" $keycloak . logoutFn">退出

    <el-button @click=" $keycloak . accountManagement">个人信息管理 3.vue.config.js

 devServer: {

    port: 8088,

更改端口号

三、配置keycloak

下载并安装keycloak和jdk

双击keycloak/bin/standalone.bat

启动 localhost:8080

创建客户端****

image.png

image.png

创建角色****

image.png

创建用户****

Users/editor 增加用户,属性,权限

attributes:avatar、introduction,Keycloak中默认的用户信息比较少,需要扩展用户信息可在attributes中添加

image.png

客户端设置attributes mappers****

设置attributes mappers之后,idtoken中会包含对应的attributes信息,方便js客户端直接获取用户信息

image.png

四.NUXT使用方式

nuxt.config.js

auth: {

    strategies: {

      keycloak: {

        scheme: 'oauth2',

        endpoints: {

          authorization: ${env[*process* *.* *env* *.* NODE_ENV] *.* AUTH_API}/auth/realms/${env[*process* *.* *env* *.* NODE_ENV] *.* KEYCLOAK_REALM}/protocol/openid-connect/auth,

          token: ${env[*process* *.* *env* *.* NODE_ENV] *.* AUTH_API}/auth/realms/${env[*process* *.* *env* *.* NODE_ENV] *.* KEYCLOAK_REALM}/protocol/openid-connect/token,

          userInfo: ${env[*process* *.* *env* *.* NODE_ENV] *.* AUTH_API}/auth/realms/${env[*process* *.* *env* *.* NODE_ENV] *.* KEYCLOAK_REALM}/protocol/openid-connect/userinfo,

          logout: ${env[*process* *.* *env* *.* NODE_ENV] *.* AUTH_API}/auth/realms/${env[*process* *.* *env* *.* NODE_ENV] *.* KEYCLOAK_REALM}/protocol/openid-connect/logout?redirect_uri= + encodeURIComponent(String(env[process . env . NODE_ENV] . ENV_API)),

        }, logoutRedirectUri: env[process . env . NODE_ENV] . ENV_API,

        token: {

          property: 'access_token',

          type: 'Bearer',

          name: 'Authorization',

          maxAge: 1800//Canbedynamic?

        },

        refreshToken: {

          property: 'refresh_token',

          maxAge: 60 * 60 * 24 * 30//Canbedynamic?

        },

        responseType: 'code',

        grantType: 'authorization_code',

        clientId: env[process . env . NODE_ENV] . KEYCLOAK_CLIENT_ID,

        scope: ['openid'],

        codeChallengeMethod: 'S256'

      }, 

    }

  },

env.js

module . exports = {

  dev: {

    NODE_ENV: 'dev',

    ENV_API:'vs-qa.antiy.cn',

    AUTH_API:'vs-auth-qa.antiy.cn',

    KEYCLOAK_CLIENT_ID:'vs-user',

    KEYCLOAK_REALM:'vs'

  },

  staging: {

    NODE_ENV: 'staging',

    ENV_API:'vs-qa.antiy.cn',

    AUTH_API:'vs-auth-qa.antiy.cn',

    KEYCLOAK_CLIENT_ID:'vs-user',

    KEYCLOAK_REALM:'vs'

  },

  production: {

    NODE_ENV: 'production',

    ENV_API:'vs.antiy.cn',

    AUTH_API:'vs-auth.antiy.cn',

    KEYCLOAK_CLIENT_ID:'vs-user',

    KEYCLOAK_REALM:'vs'

  }

}

使用

登录 this . $auth . login()

退出 this . $auth . logout()

获取用户信息

this . $auth . user

this . $auth . fetchUser()

token

this . $auth . strategy . token . get()