Vue3+ts使用oidc-client-ts

配置 OIDC 客戶端

在項目中創建 authOptions 對象,定義 OIDC 認證所需的配置項:

export const authOptions = {authority: 'https://xxxxxxxxx/UserCenter', // 認證服務器 URLclient_id: 'xxxx', // 客戶端 IDredirect_uri: 'http://localhost:3000/callback', // 登錄回調地址response_type: 'code', // 授權類型scope: 'IF.DataMaster.Writer IF.DataMaster.Reader IF.DataMaster.Modeler IF.DataMaster.Web', // 權限范圍post_logout_redirect_uri: 'https://localhost:3000/', // 登出后重定向地址client_secret: 'xxxxxxxxxxx', // 客戶端密鑰
};

創建 OIDC 用戶管理器

封裝 UserManager 實例,管理用戶認證狀態:

import { OidcClientSettings, UserManager } from 'oidc-client-ts';const userManager = ref<UserManager>();
const oidcSettings = ref<OidcClientSettings>();export async function useUserManager(): Promise<UserManager | undefined> {if (userManager.value) {return userManager.value;}const settings = authOptions;if (settings) {oidcSettings.value = settings;userManager.value = new UserManager(settings);return userManager.value;}return undefined;
}

登錄邏輯

調用 signinRedirect 發起 OIDC 登錄:

export async function signinlogin() {useUserManager().then((mgr) => {if (mgr) {mgr.signinRedirect();}});
}

處理登錄回調

在回調頁面解析用戶信息并獲取 Token:

async function signinCallback() {try {const mgr = await useUserManager();if (!mgr) return null;await mgr.signinCallback();const user = await mgr.getUser();const jwt_token = user?.access_token;if (!jwt_token) return null;const cc_token = await getTokenByJWTString(jwt_token);if (cc_token.startsWith('err@')) {message.error('OIDC 登錄失敗');return null;}return cc_token;} catch (error) {return Promise.reject(error);}
}

路由守衛集成

在路由守衛中檢查 Token,未登錄時觸發 OIDC 登錄:

export function createPermissionGuard(router: Router) {const userStore = useUserStoreWithOut();router.beforeEach(async (to, from, next) => {const token = userStore.getToken;if (!token && !to.meta.ignoreAuth) {signinlogin(); // 觸發 OIDC 登錄return;}next();});
}

Hash 路由兼容處理

若使用 Hash 路由,需在回調后清理 URL:

function createRedirectPageGuard(router: Router) {const userStore = useUserStore();router.beforeEach(async (to, _from, next) => {if (window.location.href.includes('/callback?')) {const token = await userStore.signinCallback();userStore.setToken(token as string);const { origin, pathname } = window.location;window.location.href = origin + pathname; // 清理回調參數return;}next();});
}

關鍵點說明

  • authority:OIDC 認證服務器地址。
  • client_idclient_secret:需與認證服務器配置一致。
  • signinCallback:必須在回調頁面調用以完成登錄流程。
  • Hash 路由:需手動清理 # 后的回調參數,避免路由沖突。

通過上述步驟,可實現基于 oidc-client-ts 的單點登錄集成。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96981.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96981.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96981.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從 “數據中轉站“ 到 “邊緣智能中樞“:區域網關的技術突圍與開發范式重構

在物聯網架構中,區域網關長期被視為 "邊緣與云端的橋梁"—— 負責協議轉換、數據轉發、設備接入等基礎功能。但隨著邊緣計算興起與 AI 模型輕量化,區域網關正經歷從 "被動轉發" 到 "主動決策" 的范式躍遷。 本文將從開發視角拆解區域網關的三大…

Django全棧班v1.04 Python基礎語法 20250913 早上

print 函數基本用法 print函數會自加換行符&#xff0c;一個print&#xff0c;會打印一行輸出。 print("第一行") print("第二行") print("第三行")輸出結果&#xff1a;print 輸出多個值 一個print可以同時輸出多個值&#xff0c;這多個值會在一…

面試鴨Java八股之Kafka

Kafka是什么&#xff1f;它的主要應用場景有哪些? Kafka是一種分布式流事件處理平臺&#xff0c;最初由 LinkedIn 開發&#xff0c;現在是 Apache 基金會的一部分。它的核心功能主要包括消息隊列、流處理和數據集成。Kafka以高吞吐量、低延遲、可擴展和高容錯性著稱。 Kafka…

ARM32平臺Bus Error深度排查:從調用棧到硬件原理的完整拆解

ARM32平臺Bus Error深度排查&#xff1a;從調用棧到硬件原理的完整拆解 在嵌入式開發中&#xff0c;Bus Error&#xff08;信號7&#xff09;是個容易讓人頭疼的問題——它不像SIGSEGV&#xff08;段錯誤&#xff09;那樣直觀&#xff0c;常與硬件內存布局、指針破壞等底層問題…

適合工業用的筆記本電腦

在工業領域&#xff0c;生產環境往往復雜多變&#xff0c;從高溫、高濕的車間&#xff0c;到布滿粉塵的礦山&#xff0c;再到震動頻繁的施工現場&#xff0c;普通的筆記本電腦很難在這樣的環境中穩定運行&#xff0c;而工業用筆記本電腦的誕生&#xff0c;完美地解決了這一難題…

在LINUX中常見的文件系統類型

常見文件系統類型對比表文件系統類型作用和特點主要使用場景優缺點ext4Linux標準文件系統&#xff0c;日志式&#xff0c;支持大文件和分區Linux根文件系統、/home、/var等主要分區優點&#xff1a;穩定成熟&#xff0c;支持大文件(16TB)&#xff0c;日志功能保證數據安全&…

Unity核心概念⑥:Time

一、Time的主要用途主要用于游戲中參與位移、記時、時間暫停等。二、時間縮放比例1.時間停止&#xff1a;Time.timeScale 0;2.回復正常&#xff1a;Time.timeScale 1;3.二倍速&#xff1a;Time.timeScale 2;三、幀間隔時間幀間隔時間是指最近的一幀用了多少時間。1.用途主要…

Node.js 模塊化規范詳解

在 Node.js 中&#xff0c;模塊化是開發應用程序的核心概念&#xff0c;它使得代碼可以按照功能模塊進行分割&#xff0c;易于維護、復用和擴展。Node.js 支持兩種模塊化規范&#xff1a;CommonJS&#xff08;CJS&#xff09;&#xff1a;這是 Node.js 最初使用的模塊化規范。E…

前端網絡性能優化實踐:從 HTTP 請求到 HTTPS 與 HTTP/2 升級

在前端性能優化體系中&#xff0c;服務端與網絡層的優化是提升用戶體驗的關鍵環節。本文將圍繞 HTTP 請求優化、Cookie 管理、服務器緩存配置、gzip 壓縮、HTTPS 部署及 HTTP/2 升級等核心內容&#xff0c;系統拆解優化策略與實施方法&#xff0c;為團隊技術分享提供完整的知識…

[數據結構——lesson8.樹]

目錄 引言 學習目標 1.樹的概念及結構 1.1樹的定義 1.2樹的基本概念 1.3 樹的表示 (1)雙親表示法 (2)孩子表示法 (3)左孩子右兄弟表示法 1.4 樹在實際中的運用&#xff08;表示文件系統的目錄樹結構&#xff09; 結束語&#xff1a; 引言 之前我們學習了棧和隊列數…

告別雙系統——WSL2+UBUNTU在WIN上暢游LINUX

在Windows 11上配置WSL開發環境指南 最近換工作需要深入研究代碼&#xff0c;發現WSL&#xff08;Windows Subsystem for Linux&#xff09;是微軟為Windows開發者提供的強大工具&#xff0c;可以在Windows上直接運行Ubuntu子系統&#xff0c;無需雙系統或虛擬機&#xff08;滿…

Python爬蟲實戰:研究Ticks and spines模塊,構建電商數據采集和分析系統

1. 引言 1.1 研究背景 在信息時代,互聯網數據呈現爆炸式增長,涵蓋社會、經濟、文化等多個領域,具有極高的研究與應用價值。如何高效獲取目標數據并進行深度分析,成為信息處理領域的重要課題。Python 憑借其豐富的庫支持和簡潔的語法,在數據爬取與分析領域得到廣泛應用:…

前端基礎 —— B / CSS基礎

一、CSS 基礎概述定義&#xff1a;層疊樣式表&#xff08;Cascading Style Sheets&#xff09;作用&#xff1a;美化頁面、實現樣式與結構分離二、CSS 基本語法與引入方式1. 語法規范選擇器 {一條/N條聲明}選擇器決定針對誰修改 (找誰) 聲明決定修改啥. (干啥)<style> p…

智能農機無人駕駛作業套圈路徑規劃

國產輕量級桌面GIS軟件Snaplayers實踐&#xff1a;智能農機無人駕駛作業套圈路徑規劃1、選擇地塊角點坐標文件2、加載地塊到地圖中3、設置套圈作業路徑規劃參數4、生成套圈作業路徑5、查看套圈路徑6、查看套圈路徑8、完成本算法已經在國內外等農場已經使用多年。Snaplayers研發…

Java Collection集合框架:體系、核心與選型

目錄 一、集合框架的頂層設計&#xff1a;接口與層次 1. 兩大核心接口&#xff1a;Collection 和 Map 2. Collection接口的三大派系 二、核心實現類詳解 1. List家族實現 2. Set家族實現 3. Queue/Deque家族實現 PriorityQueue&#xff1a; ArrayDeque&#xff1a; 三…

“計算機基礎、軟件工程、設計模式、數據結構算法、操作系統、數據庫、網絡、法律法規”是計算機領域從基礎理論到工程實踐

“計算機基礎、軟件工程、設計模式、數據結構算法、操作系統、數據庫、網絡、法律法規”是計算機領域從基礎理論到工程實踐、再到合規規范的核心知識體系&#xff0c;覆蓋了軟件開發、系統架構、技術合規等關鍵維度。以下將對每個領域進行系統拆解&#xff0c;包括核心內容、學…

利用Rancher平臺搭建Swarm集群

一、Rancher概述1、rancher平臺Rancher是一個開源的企業級容器管理平臺&#xff0c;它可以幫助企業在生產環境中輕松快捷地部署和管理容器&#xff0c;也可以輕松管理各種環境的Kubernetes&#xff0c;并提供對DevOps的支持。Rancher目前已經具備全棧化一鍵部署應用、各種編排調…

Debezium日常分享系列之:MongoDB 新文檔狀態提取

Debezium日常分享系列之&#xff1a;MongoDB 新文檔狀態提取變更事件結構行為配置數組編碼嵌套結構展平MongoDB $unset 處理確定原始操作添加元數據字段選擇性應用轉換的選項配置選項已知限制Debezium MongoDB 連接器會發出數據變更消息&#xff0c;以表示 MongoDB 集合中發生的…

OpenCV:圖像透視變換

文章目錄一、透視變換是什么&#xff1f;二、透視變換的核心原理1. 關鍵概念&#xff1a;透視變換矩陣2. 核心條件&#xff1a;4對對應點三、OpenCV實現透視變換的關鍵步驟步驟1&#xff1a;讀取并預處理圖像步驟2&#xff1a;尋找目標物體的4個頂點步驟3&#xff1a;計算透視變…

commons-csv

maven依賴<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-csv --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-csv</artifactId><version>1.14.1</version></dependency…