第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Keycloak 用戶存儲 SPI 實現(xiàn)

Keycloak 用戶存儲 SPI 實現(xiàn)

FFIVE 2023-06-04 17:50:22
我正在嘗試實現(xiàn)自定義 keycloack Authenticator SPI 以針對外部數(shù)據(jù)源進行身份驗證。Spring boot Rest Service 也可以用,我也可以用那個。我要解決的用例是向用戶顯示 keycloak 登錄屏幕。Onsubmission 用戶根據(jù)外部數(shù)據(jù)源進行驗證。從外部數(shù)據(jù)源中檢索一些屬性,將其映射到 keycloak 的 id 和訪問令牌。還設置了同一用戶同時多次登錄的用戶限制條件。我在想,這可以通過檢索 keycloak 數(shù)據(jù)源中可用的用戶會話信息來解決。如果我使用外部數(shù)據(jù)源,keycloak 是否仍然維護會話信息?我遵循了官方指南(https://www.keycloak.org/docs/latest/server_development/index.html#_auth_spi_walkthrough)的第 8.3 節(jié),這與我需要的非常相似。現(xiàn)在我跳過并按照第 11 節(jié)開始(https://www.keycloak.org/docs/latest/server_development/index.html#_user-storage-spi)似乎也更合適。我所做的是從實施自定義身份驗證器開始,SPI 認為這不是正確的方法,現(xiàn)在實施了 UserStorageProvider。/*** * From UserLookupProvider */public UserModel getUserById(String id, RealmModel realm) {    System.out.println("ID: " + id + ":REALM:" + realm);    StorageId storageId = new StorageId(id);    /**     * StorageId.getExternalId() method is invoked to obtain      * the username embeded in the id parameter     */    String username = storageId.getExternalId();    System.out.println("Name:" + username);    return getUserByUsername(username, realm);}/*** * From UserLookupProvider * This method is invoked by the Keycloak login page when a user logs in */按照文檔(https://www.keycloak.org/docs/latest/server_development/index.html#packaging-and-deployment-2)我們的提供者實現(xiàn)的類文件應該放在一個 jar 中。您還必須在 META-INF/services/org.keycloak.storage.UserStorageProviderFactory 文件中聲明提供者工廠類。這里的問題是:我創(chuàng)建的 jar 在“META-INF”文件夾中沒有服務目錄,我需要手動創(chuàng)建并添加它嗎?org.keycloak.examples.federation.properties.FilePropertiesStorageFactory 創(chuàng)建 jar 后,您可以使用常規(guī)的 WildFly 方式部署它:將 jar 復制到 deploy/ 目錄或使用 JBoss CLI。使用 Maven 創(chuàng)建 jar 后,將 jar 復制到“keycloak-6.0.1\standalone\deployments”文件夾。但我沒有在“用戶聯(lián)合列表”中看到我的提供者
查看完整描述

3 回答

?
MM們

TA貢獻1886條經(jīng)驗 獲得超2個贊

萬一有人遇到這樣的問題:

由于 META-INF/services 文件夾,UserStorage SPI 未顯示。它在文檔中提供,但不清楚

在 src/main/resources 中,創(chuàng)建文件夾結構 META-INF/services

在 META-INF/services 目錄中創(chuàng)建一個名為 org.keycloak.storage.UserStorageProviderFactory 的文件(整個就是文件名)。它的內(nèi)容是您的 SPI 的完全限定類名:com.test.UserSpi


查看完整回答
反對 回復 2023-06-04
?
弒天下

TA貢獻1818條經(jīng)驗 獲得超8個贊

  • 好的,您已闡明您需要一個用戶存儲提供程序 API。偉大的

  • 現(xiàn)在關于你的第二個“問題/挑戰(zhàn)”:

從外部數(shù)據(jù)源中檢索一些屬性,將其映射到 keycloak 的 id 和訪問令牌。需要檢索用戶唯一 ID 并將其添加為 jwt 中的主題 ID。這是 id,當此令牌傳遞給其他服務時,其余服務可用于檢索 id。

為此,你能做的最好的事情是:

  1. 添加這些用戶的唯一數(shù)據(jù)作為用戶屬性(在管理控制臺上查看)

  2. 在 Keycloak 上創(chuàng)建一個“客戶端范圍”,使用“用戶屬性”的映射器將您想要(從您的用戶)添加的那些屬性映射到您的 Id-token 和 access-token。您還需要將您的客戶與您剛剛創(chuàng)建的“客戶范圍”聯(lián)系起來。

查看完整回答
反對 回復 2023-06-04
?
蠱毒傳說

TA貢獻1895條經(jīng)驗 獲得超3個贊

我不確定你需要什么。讓我們從區(qū)分 Authentication SPI(聯(lián)合身份檢查)和 User Provider SPI(聯(lián)合用戶)開始。第一個(文檔的第 8 節(jié) - 更多地關注針對外部服務對用戶進行身份驗證 - 類似于 facebook 或 google)。聯(lián)合用戶存儲更像是您在具有遺留“角色結構”的遺留系統(tǒng)中擁有自己的用戶,并且您基本上想通過 keycloak 管理它們(通過導入它們,或者通過某些 API 查詢 - 這將是部分該文檔的 11)。因此,請確定您確實需要什么。


第二,你提到以下內(nèi)容:


>  User is presented keycloak login screen. Onsubmission User is

> validated against external Datasource.

> Retrieve some attributes from external datasource, map it to

> keycloak's id and access token.

> Also put in a condition of user restriction of same user logging in

> multiple times at the same time.

> I was thinking, it could be solved by retrieving user session

> information that's available in the keycloak datasource. If i use

> external datasource, does keycloak still maintain session information?

你的意思是:從外部數(shù)據(jù)源中檢索一些屬性,將其映射到 keycloak 的 id 和訪問令牌。?通常您只檢索用戶核心信息,可能還有角色和其他自定義屬性(不是會話信息)。Keycloak 本身作為基于 openIDConnect 的授權服務器,將生成訪問令牌,其中已經(jīng)包含有關哪些受保護資源可以被誰訪問的信息,因此您實際上不需要從其他地方導入任何會話,也不必擔心上述令牌的生成.


關于: 還設置了同一用戶同時多次登錄的用戶限制條件。當您第一次登錄時,您到底想完成(或避免什么?)您的客戶收到一個有效時間為 X 的 Bearer 令牌,在那段時間內(nèi)您不需要再次登錄,直到令牌過期或被刪除;再次是您的 Auth 服務器負責的事情,而不是您實現(xiàn)的事情。您想要更具體的東西嗎?


我在想,這可以通過檢索 keycloak 數(shù)據(jù)源中可用的用戶會話信息來解決。如果我使用外部數(shù)據(jù)源,keycloak 是否仍然維護會話信息?這聽起來不對,你指的是什么會話數(shù)據(jù)?或者你需要訪問?您的用戶數(shù)據(jù)、范圍、角色等可以通過 KEycloak Rest API ( https://www.keycloak.org/docs-api/6.0/rest-api/index.html#_overview )訪問。您的外部數(shù)據(jù)源用于與用戶相關的核心數(shù)據(jù)(不是外部會話),您為什么認為需要導入外部會話?


查看完整回答
反對 回復 2023-06-04
  • 3 回答
  • 0 關注
  • 310 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號