日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

升級(jí)到 Pulsar3.0 后深入了解 JWT 鑒權(quán)

來源: 責(zé)編: 時(shí)間:2023-11-20 08:57:42 299觀看
導(dǎo)讀背景最近在測試將 Pulsar 2.11.2 升級(jí)到 3.0.1的過程中碰到一個(gè)鑒權(quán)問題,正好借著這個(gè)問題充分了解下 Pulsar 的鑒權(quán)機(jī)制是如何運(yùn)轉(zhuǎn)的。Pulsar 支持 Namespace/Topic 級(jí)別的鑒權(quán),在生產(chǎn)環(huán)境中往往會(huì)使用 topic 級(jí)別的鑒

背景

最近在測試將 Pulsar 2.11.2 升級(jí)到 3.0.1的過程中碰到一個(gè)鑒權(quán)問題,正好借著這個(gè)問題充分了解下 Pulsar 的鑒權(quán)機(jī)制是如何運(yùn)轉(zhuǎn)的。5Np28資訊網(wǎng)——每日最新資訊28at.com

Pulsar 支持 Namespace/Topic 級(jí)別的鑒權(quán),在生產(chǎn)環(huán)境中往往會(huì)使用 topic 級(jí)別的鑒權(quán),從而防止消息泄露或者其他因?yàn)闄?quán)限管控不嚴(yán)格而導(dǎo)致的問題。5Np28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5Np28資訊網(wǎng)——每日最新資訊28at.com

我們會(huì)在創(chuàng)建 topic 的時(shí)候?yàn)?nbsp;topic 綁定一個(gè)應(yīng)用,這樣就只能由這個(gè)應(yīng)用發(fā)送消息,其他的應(yīng)用嘗試發(fā)送消息的時(shí)候會(huì)遇到 401 鑒權(quán)的異常。5Np28資訊網(wǎng)——每日最新資訊28at.com

同理,對于訂閱者也可以關(guān)聯(lián)指定的應(yīng)用,從而使得只有規(guī)定的應(yīng)用可以消費(fèi)消息。5Np28資訊網(wǎng)——每日最新資訊28at.com

鑒權(quán)流程

以上的兩個(gè)功能本質(zhì)上都是通過 Pulsar 的 admin-API 實(shí)現(xiàn)的。5Np28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5Np28資訊網(wǎng)——每日最新資訊28at.com

這里關(guān)鍵的就是 role,在我們的場景下通常是一個(gè)應(yīng)用的 AppId,只要是一個(gè)和項(xiàng)目唯一綁定的 ID 即可。5Np28資訊網(wǎng)——每日最新資訊28at.com

這只是授權(quán)的一步,整個(gè)鑒權(quán)流程圖如下:5Np28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5Np28資訊網(wǎng)——每日最新資訊28at.com

詳細(xì)步驟

生成公私鑰

bin/pulsar tokens create-key-pair --output-private-key my-private.key --output-public-key my-public.key

將公鑰分發(fā)到 broker 的節(jié)點(diǎn)上,鑒權(quán)的時(shí)候 broker 會(huì)使用公鑰進(jìn)行驗(yàn)證。5Np28資訊網(wǎng)——每日最新資訊28at.com

而私鑰通常是管理員單獨(dú)保存起來用于在后續(xù)的步驟為客戶端生成 token5Np28資訊網(wǎng)——每日最新資訊28at.com

使用私鑰生成 token

之后我們便可以使用這個(gè)私鑰生成 token 了:5Np28資訊網(wǎng)——每日最新資訊28at.com

bin/pulsar tokens create --private-key file:///path/to/my-private.key /            --subject 123456eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9

其中的 subject 和本文長提到的 role 相等5Np28資訊網(wǎng)——每日最新資訊28at.com

使用 subject 授權(quán)

只是單純生成了 token 其實(shí)并沒有什么作用,還得將 subject(role) 與 topic 進(jìn)行授權(quán)綁定。5Np28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5Np28資訊網(wǎng)——每日最新資訊28at.com

也就是上圖的這個(gè)步驟。5Np28資訊網(wǎng)——每日最新資訊28at.com

這里創(chuàng)建的 admin 客戶端也得使用一個(gè) superRole 角色的 token 才有權(quán)限進(jìn)行授權(quán)。superRole 使用在  broker.conf 中進(jìn)行配置。5Np28資訊網(wǎng)——每日最新資訊28at.com

客戶端使用 token 接入 broker

PulsarClient client = PulsarClient.builder()    .serviceUrl("pulsar://broker.example.com:6650/")    .authentication(AuthenticationFactory.token("eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJKb2UifQ.ipevRNuRP6HflG8cFKnmUPtypruRC4fb1DWtoLL62SY"))    .build();

使用剛才私鑰生成的 token 接入 broker 才能生產(chǎn)或者消費(fèi)數(shù)據(jù)。5Np28資訊網(wǎng)——每日最新資訊28at.com

originalPrincipal cannot be a proxy role

這些流程正常都沒啥問題,但直到我升級(jí)了 Pulsar3.0 后客戶端直接就連不上了。5Np28資訊網(wǎng)——每日最新資訊28at.com

在 broker 中看到了 WARN 的警告日志:5Np28資訊網(wǎng)——每日最新資訊28at.com

cannot specify originalPrincipal when connecting without valid proxy role

圖片圖片5Np28資訊網(wǎng)——每日最新資訊28at.com

之后在 3.0 的升級(jí)日志中看到相關(guān)的 Issue。5Np28資訊網(wǎng)——每日最新資訊28at.com

從這個(gè) PR 相關(guān)的代碼和變更的文檔可以得知:5Np28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5Np28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5Np28資訊網(wǎng)——每日最新資訊28at.com

升級(jí)到 3.0 之后風(fēng)險(xiǎn)校驗(yàn)等級(jí)提高了,proxyRole 這個(gè)字段需要在 broker 中進(jìn)行指定(之前的版本不需要強(qiáng)制填寫)。5Np28資訊網(wǎng)——每日最新資訊28at.com

因?yàn)槲覀兪褂昧?Proxy 組件,所有的請求都需要從 proxy 中轉(zhuǎn)一次,這個(gè) proxyRole 是為了告訴 broker:只有使用了 proxyRole 作為 token 的 Proxy 才能訪問 broker,這樣保證了 broker 的安全。5Np28資訊網(wǎng)——每日最新資訊28at.com

superUserRoles: broker-admin,admin,proxy-admin proxyRoles: proxy-admin

以上是我的配置,我的 Proxy 配置的也是 proxy-admin 這個(gè) token,所以理論上是沒有問題的,但依然鑒權(quán)失敗了,查看 broker 的日志后拿到以下日志:5Np28資訊網(wǎng)——每日最新資訊28at.com

Illegal combination of role [proxy-admin] and originalPrincipal [proxy-admin]: originalPrincipal cannot be a proxy role.

排查了許久依然沒有太多頭緒,所以我提了相關(guān)的 issue:https://github.com/apache/pulsar/issues/21583之后我咨詢了 Pulsar 的 PMC @Technoboy  在他的提示下發(fā)現(xiàn)我在測試的時(shí)候使用的是 proxy-admin,正好和 proxyRoles 相等。5Np28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5Np28資訊網(wǎng)——每日最新資訊28at.com

閱讀源碼和這個(gè) PR 的 comment 之后得知:5Np28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5Np28資訊網(wǎng)——每日最新資訊28at.com

也就是說客戶端不能使用和 proxyRole 相同的角色進(jìn)行連接,這個(gè)角色應(yīng)當(dāng)也只能給 Proxy 使用,這樣的安全性才會(huì)高。5Np28資訊網(wǎng)——每日最新資訊28at.com

所以這個(gè) Comment 還在討論這是一個(gè) breaking change? 還是一個(gè)增強(qiáng)補(bǔ)丁。因?yàn)楹喜⑦@個(gè) PR 后對沒有使用 proxyRole 的客戶端將無法連接,同時(shí)也可能出現(xiàn)我這種 proxyRole 就是客戶端使用的角色,這種情況也會(huì)鑒權(quán)失敗。5Np28資訊網(wǎng)——每日最新資訊28at.com

所以我換了一個(gè) superRole 角色就可以了,比如換成了 admin。5Np28資訊網(wǎng)——每日最新資訊28at.com

但其實(shí)即便是放到我們的生產(chǎn)系統(tǒng),只要配置了 proxyRole 也不會(huì)有問題,因?yàn)槲覀儜?yīng)用所使用的 role 都是不這里的 superUserRole,全部都是使用 AppId 生成的。5Np28資訊網(wǎng)——每日最新資訊28at.com

token 不一致

但也有一個(gè)疑惑,我在換為存放在 configmap 中的 admin token 之前(測試環(huán)境使用的是 helm 安裝集群,所以這些 token 都是存放在 configmap 中的),5Np28資訊網(wǎng)——每日最新資訊28at.com

為了驗(yàn)證是否只要非 proxyRole 的 superRole 都可以使用,我就自己使用了私鑰重新生成了一個(gè) admin 的 token。5Np28資訊網(wǎng)——每日最新資訊28at.com

bin/pulsar tokens create --private-key file:///pulsar/private/private.key --subject admin

這樣生成的 token 也是可以使用的,但是我將 token 復(fù)制出來之后卻發(fā)現(xiàn) helm 生成的 token 與我用 pulsar 命令行生成的 token 并不相同。5Np28資訊網(wǎng)——每日最新資訊28at.com

為了搞清楚為什么 token 不同但鑒權(quán)依然可以通過的原因,之后我將 token decode之后知道了原因:5Np28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5Np28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5Np28資訊網(wǎng)——每日最新資訊28at.com

原來是 Header 不同從而導(dǎo)致最終的 token 不同,helm 生成的 token 中多了一個(gè) typ 字段。5Np28資訊網(wǎng)——每日最新資訊28at.com

之后我檢查了 helm 安裝的流程,發(fā)現(xiàn)原來 helm 的腳本中使用的并不是 Java 的命令行工具:5Np28資訊網(wǎng)——每日最新資訊28at.com

${PULSARCTL_BIN} token create -a RS256 --private-key-file ${privatekeytmpfile} --subject ${role} 2&> ${tokentmpfile}

這個(gè) PULSARCTL_BIN 是一個(gè)由 Go 寫的命令行工具,我查看了其中的源碼,才知道 Go 的 JWT 工具會(huì)自帶一個(gè) header。https://github.com/streamnative/pulsarctl5Np28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片5Np28資訊網(wǎng)——每日最新資訊28at.com

而 Java 是沒有這個(gè)邏輯的,但也只是加了 header,payload 的值都是相同的。這樣也就解釋了為什么 token 不同但確依然能使用的原因。5Np28資訊網(wǎng)——每日最新資訊28at.com

5Np28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-31005-0.html升級(jí)到 Pulsar3.0 后深入了解 JWT 鑒權(quán)

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 深入理解CPU緩存一致性協(xié)議MESI(建議收藏)

下一篇: 聊聊接口最大并發(fā)處理數(shù)

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 之家push系統(tǒng)迭代之路

    前言在這個(gè)信息爆炸的互聯(lián)網(wǎng)時(shí)代,能夠及時(shí)準(zhǔn)確獲取信息是當(dāng)今社會(huì)要解決的關(guān)鍵問題之一。隨著之家用戶體量和內(nèi)容規(guī)模的不斷增大,傳統(tǒng)的靠"主動(dòng)拉"獲取信息的方式已不能滿足用
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個(gè)人開發(fā)仿造稿定設(shè)計(jì)的圖片編輯器到現(xiàn)在,不知不覺已過去一年時(shí)間了,期間我經(jīng)歷了裁員失業(yè)、面試找工作碰壁,寒冬下一直沒有很好地履行計(jì)劃.....這些就放在日
  • JVM優(yōu)化:實(shí)戰(zhàn)OutOfMemoryError異常

    一、Java堆溢出堆內(nèi)存中主要存放對象、數(shù)組等,只要不斷地創(chuàng)建這些對象,并且保證 GC Roots 到對象之間有可達(dá)路徑來避免垃 圾收集回收機(jī)制清除這些對象,當(dāng)這些對象所占空間超過
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發(fā)布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時(shí)代麒麟電池,容量為101kWh,電壓為726.7V,可以預(yù)測小
  • 華為HarmonyOS 4.0將于8月4日發(fā)布 或搭載AI大模型技術(shù)

    華為宣布HarmonyOS4.0將于8月4日正式發(fā)布。此前,華為已經(jīng)針對開發(fā)者公布了HarmonyOS4.0,以便于開發(fā)者提前進(jìn)行適配,也因此被曝光出了一些新系統(tǒng)的特性
  • 2納米決戰(zhàn)2025

    集微網(wǎng)報(bào)道 從三強(qiáng)爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺(tái)積電、三星,還是誓言重回先進(jìn)制程領(lǐng)先地位的英特爾,甚至初成立不久的新
  • 三星獲批量產(chǎn)iPhone 15全系屏幕:蘋果史上最驚艷直屏

    按照慣例,蘋果將繼續(xù)在今年9月舉辦一年一度的秋季新品發(fā)布會(huì),有傳言稱發(fā)布會(huì)將于9月12日舉行,屆時(shí)全新的iPhone 15系列將正式與大家見面,不出意外的話
  • 利用職權(quán)私自解除被封帳號(hào) Meta開除20多名員工

    11月18日消息,據(jù)外媒援引知情人士表示,過去一年時(shí)間內(nèi),F(xiàn)acebook母公司Meta解雇或處罰了20多名員工以及合同工,指控這些人通過內(nèi)部系統(tǒng)以不當(dāng)方式重置用戶帳號(hào),其
  • 北京:科技教育體驗(yàn)基地開始登記

      北京“科技館之城”科技教育體驗(yàn)基地登記和認(rèn)證工作日前啟動(dòng)。首批北京科技教育體驗(yàn)基地?cái)M于2023年全國科普日期間掛牌,后續(xù)還將開展常態(tài)化登記。  北京科技教育體驗(yàn)基
Top 主站蜘蛛池模板: 佛冈县| 察隅县| 朝阳区| 佳木斯市| 砀山县| 邹城市| 封开县| 巫山县| 昂仁县| 来安县| 宜兰县| 江门市| 昔阳县| 荔波县| 鄂托克前旗| 莒南县| 都匀市| 东乡族自治县| 西峡县| 永寿县| 鄂托克前旗| 太仓市| 咸丰县| 承德市| 镶黄旗| 呼伦贝尔市| 九江市| 德安县| 昌江| 彭州市| 朝阳市| 任丘市| 孟津县| 句容市| 和静县| 光山县| 安顺市| 龙泉市| 剑河县| 平谷区| 翼城县|