我正在尝试实现自定义 keycloack Authenticator SPI 以针对外部数据源进行身份验证。Spring boot Rest Service 也可以用,我也可以用那个。
我要解决的用例是
向用户显示 keycloak 登录屏幕。Onsubmission 用户根据外部数据源进行验证。
从外部数据源中检索一些属性,将其映射到 keycloak 的 id 和访问令牌。
还设置了同一用户同时多次登录的用户限制条件。
我在想,这可以通过检索 keycloak 数据源中可用的用户会话信息来解决。如果我使用外部数据源,keycloak 是否仍然维护会话信息?
我遵循了官方指南(https://www.keycloak.org/docs/latest/server_development/index.html#_auth_spi_walkthrough)的第 8.3 节,这与我需要的非常相似。
现在我跳过并按照第 11 节开始(https://www.keycloak.org/docs/latest/server_development/index.html#_user-storage-spi)似乎也更合适。
我所做的是从实施自定义身份验证器开始,SPI 认为这不是正确的方法,现在实施了 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)
我们的提供者实现的类文件应该放在一个 jar 中。您还必须在 META-INF/services/org.keycloak.storage.UserStorageProviderFactory 文件中声明提供者工厂类。
这里的问题是:我创建的 jar 在“META-INF”文件夹中没有服务目录,我需要手动创建并添加它吗?
org.keycloak.examples.federation.properties.FilePropertiesStorageFactory 创建 jar 后,您可以使用常规的 WildFly 方式部署它:将 jar 复制到 deploy/ 目录或使用 JBoss CLI。
使用 Maven 创建 jar 后,将 jar 复制到“keycloak-6.0.1\standalone\deployments”文件夹。但我没有在“用户联合列表”中看到我的提供者
MM们
弑天下
蛊毒传说
相关分类