我有一個 Keycloak 實體,并為每個領域創建了兩個領域和一個用戶。
Realm1 (Tenant1) -> User 1
Realm2 (Tenant2) -> User 2
我有一個特定領域的 spring boot application.yml(資源服務器 - API)并在我的代碼中修復。
keycloak:
realm: Realm1
auth-server-url: https://localhost:8443/auth
ssl-required: external
resource: app
bearer-only: true
use-resource-role-mappings: true
它正在為 Realm1 作業和驗證。
但是現在我可以接收來自 user2 (tenant2) 的請求并且令牌將無效,因為公鑰 (realm1) 對簽名的請求 jwt 令牌 (realm2) 無效。
允許多租戶和多領域動態配置的最佳方法是什么?
謝謝,
uj5u.com熱心網友回復:
有一整章關于它:2.1.18:多租戶
與其在 spring application.yaml 中定義 keycloak 配置,不如保留多個 keycloak.json 組態檔,并使用自定義 KeycloakConfigResolver:
public class PathBasedKeycloakConfigResolver implements KeycloakConfigResolver {
@Override
public KeycloakDeployment resolve(OIDCHttpFacade.Request request) {
if (request.getPath().startsWith("alternative")) { // or some other criteria
InputStream is = getClass().getResourceAsStream("/tenant1-keycloak.json");
return KeycloakDeploymentBuilder.build(is); //TODO: cache result
} else {
InputStream is = getClass().getResourceAsStream("/default-keycloak.json");
return KeycloakDeploymentBuilder.build(is); //TODO: cache result
}
}
}
我不確定這是否適用于keycloak-spring-boot-starter,但我認為只需在 KeycloakWebSecurityConfigurerAdapter 中連接您的自定義 KeycloakConfigResolver 就足夠了:
@Configuration
@EnableWebSecurity
class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
@Bean
public KeycloakConfigResolver keycloakConfigResolver() {
return new PathBasedKeycloakConfigResolver();
}
[...]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/336929.html
上一篇:org.hibernate.MappingException創建物體管理器,其中列名與屬性名不同
下一篇:當串列分頁的大小輸入設定為大于15時,SpringDataPagedListHolder沒有回傳正確的PageSize,為什么?
