接入keycloak实现单点登录

在这里插入图片描述

问题

1.如果跨域在keycloak管理中心Clients-Client details-Settings-Web origins添加浏览器访问地址就行

一、html引入cdn实现
页面引入
<!-- keycloak -->
<script src="https://unpkg.com/keycloak-js@22.0.5/dist/keycloak.js"></script>
<!-- keycloakFunc模块 -->
<script src="./keycloakFunc.js"></script>
<script type="text/javascript">
// 初始化keycloak,如果是vue单页面就在main.js中引入调用该函数
initKeycloak()
// 其他逻辑
</script>
keycloakFunc.js
// 需要设置为自己keycloak配置信息
let initOptions = {
  url: 'http://keycloak-dev',
  realm: 'master',
  clientId: 'vue',
  onLoad: 'login-required',
  enableLogging: true
}
// 登录接口
const loginUrl = 'http://baidu.com:8080'

const keycloak = new Keycloak(initOptions);
let authenticated = false;
// 进入页面调用
function initKeycloak() {
  keycloak.init({ onLoad: initOptions.onLoad }).then((auth) => {
    if (!auth) {
      window.location.reload();
    } else {
      fetch(loginUrl + '/login', {
        method: 'POST', // 请求方法,可以是 'GET'、'POST'、'PUT' 等
        headers: {
          Authorization: 'Bearer ' + keycloak.token
        },
        // body: JSON.stringify(requestData), // 将请求体数据转换为 JSON 字符串
      })
        .then(response => response.json())
        .then(res => {
          console.log(res)
          if (res.code == 200) {
            authenticated = true;
          } else {
            console.log('登录失败:', res)
          }
        })
        .catch(error => console.error('Error:', error));
    }

    //Token Refresh
    setInterval(() => {
      keycloak.updateToken(70).then((refreshed) => {
        if (refreshed) {
          //更新token
          // setToken(keycloak.token);
          console.log('Token refreshed' + refreshed);
        } else {
          console.log('Token not refreshed, valid for ' + Math.round(keycloak.tokenParsed.exp + keycloak.timeSkew - new Date().getTime() / 1000) + ' seconds');
        }
      }).catch(() => {
        console.log('Failed to refresh token');
      });
    }, 6000)

  }).catch(() => {
    console.log("Authenticated Failed");
  });
}
// 退出时调用
function keycloakLogout() {
  keycloak.logout("/login");
}

function isAuthenticated() {
  return authenticated;
}

二、vue单页面实现
npm安装
npm i keycloak-js --save 或者 yarn add keycloak-js
main.js
import { initKeycloak } from "./assets/js/keycloakFunc";
initKeycloak();
keycloakFunc.js
import Keycloak from 'keycloak-js';
// 需要设置为自己keycloak配置信息
let initOptions = {
  url: 'http://keycloak-dev',
  realm: 'master',
  clientId: 'vue',
  onLoad: 'login-required',
  enableLogging: true
}
// 登录接口
const loginUrl = 'http://baidu.com:8080'

const keycloak = new Keycloak(initOptions);
let authenticated = false;
// 进入页面调用
export function initKeycloak() {
  keycloak.init({ onLoad: initOptions.onLoad }).then((auth) => {
    if (!auth) {
      window.location.reload();
    } else {
      fetch(loginUrl + '/login', {
        method: 'POST', // 请求方法,可以是 'GET'、'POST'、'PUT' 等
        headers: {
          Authorization: 'Bearer ' + keycloak.token
        },
        // body: JSON.stringify(requestData), // 将请求体数据转换为 JSON 字符串
      })
        .then(response => response.json())
        .then(res => {
          console.log(res)
          if (res.code == 200) {
            authenticated = true;
          } else {
            console.log('登录失败:', res)
          }
        })
        .catch(error => console.error('Error:', error));
    }

    //Token Refresh
    setInterval(() => {
      keycloak.updateToken(70).then((refreshed) => {
        if (refreshed) {
          //更新token
          // setToken(keycloak.token);
          console.log('Token refreshed' + refreshed);
        } else {
          console.log('Token not refreshed, valid for ' + Math.round(keycloak.tokenParsed.exp + keycloak.timeSkew - new Date().getTime() / 1000) + ' seconds');
        }
      }).catch(() => {
        console.log('Failed to refresh token');
      });
    }, 6000)

  }).catch(() => {
    console.log("Authenticated Failed");
  });
}
// 退出时调用
export function keycloakLogout() {
  keycloak.logout("/login");
}

export function isAuthenticated() {
  return authenticated;
}

export default keycloak
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要使用Keycloak单点登录,需要完成以下步骤: 1. 安装Keycloak 2. 创建一个Keycloak Realm 3. 添加一个Client 4. 在Vue应用中安装Keycloak插件 5. 配置Vue应用以使用Keycloak插件 6. 在Vue应用中实现认证和授权 具体的操作步骤如下: 1. 安装Keycloak 可以参考Keycloak官方文档来安装Keycloak,官方文档地址为:https://www.keycloak.org/documentation.html 2. 创建一个Keycloak Realm 可以创建一个Realm,用于存储应用程序的用户,角色和客户端信息。可以参考Keycloak官方文档来创建Realm,官方文档地址为:https://www.keycloak.org/documentation.html 3. 添加一个Client 在Keycloak中添加一个Client,该Client将用于Vue应用的单点登录。可以参考Keycloak官方文档来添加Client,官方文档地址为:https://www.keycloak.org/documentation.html 4. 在Vue应用中安装Keycloak插件 运行以下命令来安装Vue Keycloak插件: ``` npm install vue-keycloak-js --save ``` 5. 配置Vue应用以使用Keycloak插件 在Vue应用中配置Keycloak插件,包括realm,client ID和Keycloak URL等信息。可以参考Vue Keycloak插件的官方文档来配置,官方文档地址为:https://www.npmjs.com/package/vue-keycloak-js 6. 在Vue应用中实现认证和授权 在Vue应用中使用Keycloak插件来实现认证和授权。可以使用Keycloak提供的API来调用认证和授权相关的功能。可以参考Vue Keycloak插件的官方文档来实现认证和授权,官方文档地址为:https://www.npmjs.com/package/vue-keycloak-js 以上就是使用Keycloak单点登录的基本步骤,如果需要更详细的操作步骤,可以参考Keycloak和Vue Keycloak插件的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘斩仙的笔记本

富贵险中求

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值