亚洲乱码中文字幕手机在线_人妻少妇被猛烈进入中文字幕_日本欧美大码A在线观看_国产成人欧美日本在线观看_女人自熨全过程直播

首頁(yè) > 資訊 >

使用 IdentityServer 保護(hù) Vue 前端

2022-12-19 16:49:57 來(lái)源:
前情提要

《使用 IdentityServer 保護(hù) Web 應(yīng)用(AntD Pro 前端 + SpringBoot 后端)》中記錄了使用 IdentityServer 保護(hù)前后端的過程,其中的前端工程是以 UMI Js 為例。今天,再來(lái)記錄一下使用 IdentityServer 保護(hù) Vue 前端的過程,和 UMI Js 項(xiàng)目使用 umi plugin 的方式不同,本文沒有使用 Vue 相關(guān)的插件,而是直接使用了 oidc-client js。

另外,我對(duì) Vue 這個(gè)框架非常不熟,在 vue-router 這里稍微卡住了一段時(shí)間,后來(lái)瞎試居然又成功了。針對(duì)這個(gè)問題,我還去 StackOverflow 上問了,但并沒有收到有效的回復(fù):https://stackoverflow.com/questions/74769607/how-to-access-vues-methods-from-navigation-guard


(資料圖)

準(zhǔn)備工作

首先,需要在 IdentityServer 服務(wù)器端注冊(cè)該 Vue 前端應(yīng)用,仍然以代碼寫死這個(gè)客戶端為例:

new Client{ClientId = "vue-client",ClientSecrets = { new Secret("vue-client".Sha256()) },ClientName = "vue client",AllowedGrantTypes = GrantTypes.Implicit,AllowAccessTokensViaBrowser = true,RequireClientSecret = false,RequirePkce = true,RedirectUris ={"http://localhost:8080/callback","http://localhost:8080/static/silent-renew.html",},AllowedCorsOrigins = { "http://localhost:8080" },AllowedScopes = { "openid", "profile", "email" },AllowOfflineAccess = true,AccessTokenLifetime = 90,AbsoluteRefreshTokenLifetime = 0,RefreshTokenUsage = TokenUsage.OneTimeOnly,RefreshTokenExpiration = TokenExpiration.Sliding,UpdateAccessTokenClaimsOnRefresh = true,RequireConsent = false,};

在 Vue 工程里安裝 oidc-client

yarn add oidc-client

在 Vue 里配置 IdentityServer 服務(wù)器信息

在項(xiàng)目里添加一個(gè) src/security/security.js文件:

import Oidc from "oidc-client"function getIdPUrl() {return "https://id6.azurewebsites.net";}Oidc.Log.logger = console;Oidc.Log.level = Oidc.Log.DEBUG;const mgr = new Oidc.UserManager({authority: getIdPUrl(),client_id: "vue-client",redirect_uri: window.location.origin + "/callback",response_type: "id_token token",scope: "openid profile email",post_logout_redirect_uri: window.location.origin + "/logout",userStore: new Oidc.WebStorageStateStore({store: window.localStorage}),automaticSilentRenew: true,silent_redirect_uri: window.location.origin + "/silent-renew.html",accessTokenExpiringNotificationTime: 10,})export default mgr

在 main.js 里注入登錄相關(guān)的數(shù)據(jù)和方法數(shù)據(jù)

不借助任何狀態(tài)管理包,直接將相關(guān)的數(shù)據(jù)添加到 Vue 的 app 對(duì)象上:

import mgr from "@/security/security";const globalData = {isAuthenticated: false,user: "",mgr: mgr}

方法

const globalMethods = {async authenticate(returnPath) {console.log("authenticate")const user = await this.$root.getUser();if (user) {this.isAuthenticated = true;this.user = user} else {await this.$root.signIn(returnPath)}},async getUser() {try {return await this.mgr.getUser();} catch (err) {console.error(err);}},signIn(returnPath) {returnPath ? this.mgr.signinRedirect({state: returnPath}) : this.mgr.signinRedirect();}}

修改 Vue 的實(shí)例化代碼

new Vue({router,data: globalData,methods: globalMethods,render: h => h(App),}).$mount("#app")

修改 router

在 src/router/index.js中,給需要登錄的路由添加 meta 字段:

Vue.use(VueRouter)const router = new VueRouter({{path: "/private",name: "private page",component: resolve => require(["@/pages/private.vue"], resolve),meta: {requiresAuth: true}}});export default router

接著,正如在配置中體現(xiàn)出來(lái)的,需要一個(gè)回調(diào)頁(yè)面來(lái)接收登錄后的授權(quán)信息,這可以通過添加一個(gè) src/views/CallbackPage.vue文件來(lái)實(shí)現(xiàn):

<script>export default {async created() {try {const result = await this.$root.mgr.signinRedirectCallback();const returnUrl = result.state ?? "/";await this.$router.push({path: returnUrl})}catch(e){await this.$router.push({name: "Unauthorized"})}}}</script>

然后,需要在路由里配置好這個(gè)回調(diào)頁(yè)面:

import CallbackPage from "@/views/CallbackPage.vue";Vue.use(VueRouter)const router = new VueRouter({routes: {path: "/private",name: "private page",component: resolve => require(["@/pages/private.vue"], resolve),meta: {requiresAuth: true}},{path: "/callback",name: "callback",component: CallbackPage}});export default router

同時(shí),在這個(gè) router 里添加一個(gè)所謂的“全局前置守衛(wèi)”(https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%85%A8%E5%B1%80%E5%89%8D%E7%BD%AE%E5%AE%88%E5%8D%AB),注意就是這里,我碰到了問題,并且在 StackOverflow 上提了這個(gè)問題。在需要調(diào)用前面定義的認(rèn)證方法時(shí),不能使用 router.app.authenticate,而要使用 router.apps[1].authenticate,這是我通過 inspect router發(fā)現(xiàn)的:

...router.beforeEach(async function (to, from, next) {let app = router.app.$data || {isAuthenticated: false}if(app.isAuthenticated) {next()} else if (to.matched.some(record => record.meta.requiresAuth)) {router.apps[1].authenticate(to.path).then(()=>{next()})}else {next()}})export default router

到了這一步,應(yīng)用就可以跑起來(lái)了,在訪問 /private 時(shí),瀏覽器會(huì)跳轉(zhuǎn)到 IdentityServer 服務(wù)器的登錄頁(yè)面,在登錄完成后再跳轉(zhuǎn)回來(lái)。

添加 silent-renew.html

注意 security.js,我們啟用了 automaticSilentRenew,并且配置了 silent_redirect_uri的路徑為 silent-renew.html。它是一個(gè)獨(dú)立的引用了 oidc-client js 的 html 文件,不依賴 Vue,這樣方便移植到任何前端項(xiàng)目。

oidc-client.min.js

首先,將我們安裝好的 oidc-client 包下的 node_modules/oidc-client/dist/oidc-client.min.js文件,復(fù)制粘貼到 public/static目錄下。

然后,在這個(gè)目錄下添加 public/static/silent-renew.html文件。

Silent Renew Token<script src="oidc-client.min.js"></script><script>console.log("renewing tokens");new Oidc.UserManager({userStore: new Oidc.WebStorageStateStore({ store: window.localStorage })}).signinSilentCallback();</script>

給 API 請(qǐng)求添加認(rèn)證頭

最后,給 API 請(qǐng)求添加上認(rèn)證頭。前提是,后端接口也使用同樣的 IdentityServer 來(lái)保護(hù)(如果是 SpringBoot 項(xiàng)目,可以參考《[使用 IdentityServer 保護(hù) Web 應(yīng)用(AntD Pro 前端 + SpringBoot 后端) - Jeff Tian的文章 - 知乎](https://zhuanlan.zhihu.com/p/533197284) 》);否則,如果 API 是公開的,就不需要這一步了。

對(duì)于使用 axios 的 API 客戶端,可以利用其 request interceptors,來(lái)統(tǒng)一添加這個(gè)認(rèn)證頭,比如:

import router from "../router"import Vue from "vue";const v = new Vue({router})const service = axios.create({// 公共接口--這里注意后面會(huì)講baseURL: process.env.BASE_API,// 超時(shí)時(shí)間 單位是ms,這里設(shè)置了3s的超時(shí)時(shí)間timeout: 20 * 1000});service.interceptors.request.use(config => {const user = v.$root.user;if(user) {const authToken = user.access_token;if(authToken){config.headers.Authorization = `Bearer ${authToken}`;}}return config;}, Promise.reject)export default service

標(biāo)簽:

使用 IdentityServer 保護(hù) Vue 前端

前情提要《使用IdentityServer保護(hù)Web應(yīng)用(AntDPro前端+SpringBoot后端)》中記錄了使用IdentitySer

2022-12-19

今日聚焦!深圳南山區(qū)將發(fā)2億元消費(fèi)券促消費(fèi)

證券時(shí)報(bào)網(wǎng)訊,據(jù)深圳特區(qū)報(bào)公眾號(hào),12月18日,“HiGo南山·見圳美好生活”促消費(fèi)活動(dòng)正式啟動(dòng)。即日起...

2022-12-19

滴水貸逾期50年會(huì)上征信系統(tǒng)嗎

網(wǎng)貸逾期一般會(huì)上征信,有些借貸機(jī)構(gòu)在用戶逾期后一天后就會(huì)上報(bào)給征信機(jī)構(gòu),而有些借貸機(jī)構(gòu)則是會(huì)在幾天...

2022-12-19

聚焦:小贏卡貸借款逾期3年還不起征信有什么影響

網(wǎng)貸逾期一般會(huì)上征信,有些借貸機(jī)構(gòu)在用戶逾期后一天后就會(huì)上報(bào)給征信機(jī)構(gòu),而有些借貸機(jī)構(gòu)則是會(huì)在幾天...

2022-12-18

V觀財(cái)報(bào)|光正眼科收警示函 涉信披、商譽(yù)計(jì)提違規(guī)

光正眼科15日晚間公告,公司及相關(guān)人員收到新疆證監(jiān)局警示函。上述共同投資構(gòu)成關(guān)聯(lián)交易,公司未履行審...

2022-12-17

今日最新!八爪魚怎么清洗 八爪魚清洗方法

1 剛買的章魚,最好先用清水沖洗一下。2 洗凈后,將章魚放入鍋中,加入適量的水和醋,反復(fù)揉搓數(shù)次,...

2022-12-17

當(dāng)前訊息:cfa在德國(guó)就業(yè)前景,想知道的來(lái)看

cfa在德國(guó)的就業(yè)前景很好,金融行業(yè)本身的發(fā)展前景就不錯(cuò),如果能夠持有cfa證書那么會(huì)有更好的加成。在...

2022-12-16

ST新城董秘回復(fù):公司一直在努力尋求多元化轉(zhuǎn)型發(fā)展

ST新城(000809)12月16日在投資者關(guān)系平臺(tái)上答復(fù)了投資者關(guān)心的問題。投資者:你好,近年來(lái),公司年年賣...

2022-12-16

怎么查詢信用卡欠款的詳細(xì)流程?

二、電話查詢撥打銀行信用卡電話,轉(zhuǎn)人工服務(wù),即可要求客服查詢您當(dāng)前的欠款情況。有的銀行開通微信公...

2022-12-15

頭條焦點(diǎn):首創(chuàng)環(huán)保: 首創(chuàng)環(huán)保第八屆董事會(huì)2022年度第九次臨時(shí)會(huì)議決議公告

首創(chuàng)環(huán)保:首創(chuàng)環(huán)保第八屆董事會(huì)2022年度第九次臨時(shí)會(huì)議決議公告

2022-12-15

世界熱訊:寶鋼股份:進(jìn)口澳煤將對(duì)公司煤炭品種采購(gòu)、結(jié)構(gòu)調(diào)整帶來(lái)積極作用,同時(shí)也能降低湛江基地的煤炭運(yùn)輸成本

(原標(biāo)題:寶鋼股份:進(jìn)口澳煤將對(duì)公司煤炭品種采購(gòu)、結(jié)構(gòu)調(diào)整帶來(lái)積極作用,同時(shí)也能降低湛江基地的煤...

2022-12-15

四川路橋: 北京康達(dá)律師事務(wù)所關(guān)于四川路橋2019年限制性股票激勵(lì)計(jì)劃首次授予部分第二個(gè)解除限售期、預(yù)留授予部分第一個(gè)解除限售期解除限售條件成就以及回購(gòu)注銷2019年限制性股票激勵(lì)計(jì)劃、2021年限制性股票激勵(lì)計(jì)

四川省成都市東御街?18?號(hào)百揚(yáng)大廈?1?棟?11?樓郵編:610000??????????????????...

2022-12-14

綠康生化(002868)12月14日主力資金凈賣出1174.38萬(wàn)元

截至2022年12月14日收盤,綠康生化(002868)報(bào)收于57 53元,上漲5 75%,換手率2 29%,成交量3 49萬(wàn)手...

2022-12-14

全球微動(dòng)態(tài)丨索菲亞:12月13日獲融資買入1217.67萬(wàn)元,占當(dāng)日流入資金比例11.92%

同花順數(shù)據(jù)中心顯示,索菲亞12月13日獲融資買入1217 67萬(wàn)元,占當(dāng)日買入金額的11 92%,當(dāng)前融資余額2...

2022-12-14

熱點(diǎn)評(píng)!美國(guó)造車新勢(shì)力Lucid開始在華招人 不久前被馬斯克暗示即將倒閉

【美國(guó)造車新勢(shì)力Lucid開始在華招人不久前被馬斯克暗示即將倒閉】中國(guó)新能源汽車市場(chǎng)或?qū)⒂瓉?lái)又一海外強(qiáng)...

2022-12-13

環(huán)球觀天下!皇氏集團(tuán)增資皇氏農(nóng)光獲控制權(quán) 光伏板塊子公司納入合并報(bào)表

皇氏集團(tuán)(002329)光伏產(chǎn)業(yè)布局逐漸清晰?! ?2月12日晚間公告顯示,皇氏集團(tuán)與與深圳市奕鳴新能源有限...

2022-12-13

天天快看點(diǎn)丨男方有網(wǎng)貸女方需要還嗎

男方的網(wǎng)貸信用卡的賭債不屬于夫妻共同債務(wù),女方不需要償還。夫妻共同債務(wù)是指為滿足夫妻共同生活需要...

2022-12-13

每日快訊!《絕地追擊》首曝預(yù)告高至霆演繹武警酷帥有型

Yes娛樂12月12日訊近日,由邱禮濤執(zhí)導(dǎo)、高至霆主演的災(zāi)難動(dòng)作電影《絕地追擊》首次發(fā)布預(yù)告。該片講述了...

2022-12-12

最新:喜悅智行:公司將會(huì)按照證監(jiān)會(huì)、深交所的相關(guān)規(guī)定在定期報(bào)告中披露相關(guān)股東人數(shù),敬請(qǐng)關(guān)注公司相關(guān)公告

喜悅智行(301198)12月12日在投資者關(guān)系平臺(tái)上答復(fù)了投資者關(guān)心的問題。投資者:請(qǐng)問截至2022年12月10日...

2022-12-12

最新:羅萊生活董秘回復(fù):公司于2022年8月公告以自有資金取得工業(yè)用地,用以建設(shè)南通新總部和羅萊智慧產(chǎn)業(yè)園區(qū)

羅萊生活(002293)12月09日在投資者關(guān)系平臺(tái)上答復(fù)了投資者關(guān)心的問題。投資者:請(qǐng)問貴司新的產(chǎn)能擴(kuò)建預(yù)...

2022-12-09

每日觀點(diǎn):大眾汽車將投資近5億美元改造沃爾夫斯堡工廠?以生產(chǎn)電動(dòng)汽車

【TechWeb】12月8日消息,據(jù)國(guó)外媒體報(bào)道,大眾汽車將在2025年初前投資近5億美元,對(duì)其沃爾夫斯堡生產(chǎn)工...

2022-12-08

今日聚焦!【機(jī)構(gòu)調(diào)研記錄】朱雀基金調(diào)研海創(chuàng)藥業(yè)、歐科億等5只個(gè)股(附名單)

根據(jù)市場(chǎng)公開信息及12月6日披露的機(jī)構(gòu)調(diào)研信息,朱雀基金近期對(duì)5家上市公司進(jìn)行了調(diào)研,相關(guān)名單如下:1...

2022-12-07

外籍志愿者“老羅”:戰(zhàn)“疫”讓我感受到“長(zhǎng)征精神”

口述者:社區(qū)志愿者Jacob(荷蘭裔新西蘭人)采訪記者:張懿 通訊員:韓海峰 地處松江區(qū)的東明花苑小區(qū),這...

2022-04-22

北京朝陽(yáng)區(qū)發(fā)現(xiàn)1例新冠核酸檢測(cè)初篩陽(yáng)性

4月22日,北京市朝陽(yáng)區(qū)發(fā)現(xiàn)1例新冠核酸檢測(cè)初篩陽(yáng)性,現(xiàn)住朝陽(yáng)區(qū)垡頭西里38號(hào)樓。朝陽(yáng)區(qū)已第一時(shí)間啟動(dòng)...

2022-04-22

為何要高頻度核酸檢測(cè)?上海相關(guān)部門回應(yīng)

(上海戰(zhàn)疫錄)為何要高頻度核酸檢測(cè)?上海相關(guān)部門回應(yīng) 中新網(wǎng)上海4月22日電 (周卓傲)上海從4月22日起開...

2022-04-22

上海這個(gè)大型社區(qū)探索防控新路:劃一塊 清一塊 解封一塊

醫(yī)?;鹗恰熬让X”,需人人捍衛(wèi)

上海六人因偽造、買賣通行證被采取刑事強(qiáng)制措施

“反詐警官老陳”:面對(duì)網(wǎng)絡(luò)爭(zhēng)議,我駕馭不住流量了

廣東專家團(tuán)隊(duì):限時(shí)飲食干預(yù)與常規(guī)能量限制同樣有效

31省份新增本土確診病例2119例 新增本土無(wú)癥狀感染者16383例

廣東新增本土確診病例5例 新增本土無(wú)癥狀感染者1例

上海全市性的封控還會(huì)持續(xù)多久?相關(guān)部門回應(yīng)

河南新增本土確診病例3例、本土無(wú)癥狀感染者14例

云南保山捐贈(zèng)的鐵皮石斛、茶葉被偷拿?上海閔行區(qū)回應(yīng)

安徽新增無(wú)癥狀感染者28例

南方降雨再度發(fā)展雨水頻繁到月底 北方氣溫多起伏

南方地區(qū)將有明顯降水 冷空氣影響東北華北等地

河北新增本土確診病例1例、本土無(wú)癥狀感染者77例

黑龍江新增本土確診34例、本土無(wú)癥狀感染者56例

緊盯“圍獵” 湖南通報(bào)5起向縣區(qū)委書記行賄典型案例

北京新增1例本土確診病例

山西新增本土確診病例3例、無(wú)癥狀感染者16例

海南新增3例本土確診病例

年輕人找工作莫讓“山寨證書”絆住腳

對(duì)話“抗癌考研”女生:學(xué)習(xí)和奮斗讓生活重回正軌

為何簡(jiǎn)、簡(jiǎn)什么、怎么簡(jiǎn)?對(duì)話“極簡(jiǎn)生活”的年輕人

云南新增2例本土確診病例 9例本土無(wú)癥狀感染者

山東新增本土無(wú)癥狀感染者23例

杭州拱墅區(qū)今日5點(diǎn)起開展全員核酸檢測(cè)

Copyright @  2015-2022 太平洋家電網(wǎng)版權(quán)所有  備案號(hào): 豫ICP備2022016495號(hào)-17   聯(lián)系郵箱:93 96 74 66 9@qq.com