我试图解决的用例是
用户将显示keycloak登录屏幕。Onsubmission用户将根据外部数据源验证。
从外部数据源中检索一些属性,将其映射到KeyCloak的id和访问令牌。
我所做的是从实现自定义身份验证器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
*/
public UserModel getUserByUsername(String username, RealmModel realm) {
System.out.println("USERNAME: " + username + ":REALM:" + realm);
UserModel userModel = loadedUsers.get(username);
if (userModel == null) {
String password = properties.getProperty(username);
if (password != null) {
userModel = createUserModel(realm, username);
System.out.println("New UserModel:");
System.out.println(userModel.toString());
loadedUsers.put(username, userModel);
}
}
return userModel;
}
protected UserModel createUserModel(RealmModel realm, String username) {
return new AbstractUserAdapter(session, realm, model) {
@Override
public String getUsername() {
return username;
}
};
}
遵循文档(https://www.keycloak.org/docs/latest/server_development/index.html#packaging-and-deployment-2)
提供程序实现的类文件应该放在一个JAR中。您还必须在meta-inf/services/org.keycloak.storage.UserStorageProviderFactory文件中声明provider工厂类。
如有任何建议/帮助,我们将不胜感激!!
谢谢你的建议。
我已经实现了keycloak用户存储SPI流。它针对外部源进行身份验证。Keycloak是用外部存储属性更新的,如果它在getUserByUsername方法中更新,它就可以工作。 我正在isValid方法中验证userValidation,并更新UserModel和LocalHashMap中的userAttributes。 从日志中,我看到UserStoreProviderFactory创建了两
创建了一个用户存储SPI,用于对外部数据库中的用户进行身份验证,可以在KeyCloak的“用户”页面中列出所有用户,用户可以从KeyCloak登录页面http://127.0.0.1:8080/auth/realms/dev/account/登录。但是如果我想从http://127.0.0.1:8080/auth/realms/dev/protocol/openid-connect/token获取
我已经成功地设置了嵌入在Spring Boot应用程序中的Keycloak服务器,遵循本教程:嵌入在Spring Boot应用程序中的Keycloak以避免手动设置它。 由于我要处理的是一个已经有自己DB的旧实现,所以我决定使用Keycloak的用户存储SPI连接到外部postgresql DB,并使用它来进行身份验证,而不是Keycloak DB。 为此,我遵循了关于Keycloak文档的教程,
我已经实现了一个自定义的Keycloak UserStorageProvider SPI(以下是官方文档https://www.Keycloak.org/docs/latest/server_development/index.html#_user-storage-spi的第11点),它执行以下操作: 根据外部身份验证服务对用户(以前不存在于本地存储中)进行身份验证。 将(针对自定义服务成功进行身
sql.conf中的read_groups指令的值可能由前一个管理员设置为no;将其更改为yes将激活所有用户的组表读取。 需要先安装freeradius-postgresql包。该软件包包含所需的设置文件以及PostgreSQL特定的FreeRADIUS模块。 不,您不对SQL数据库或文本文件进行身份验证,而是使用它们来存储凭据。然后,验证模块使用存储在文本文件或SQL数据库中的数据进行密码验证
用户存储 用户存储是保存用户详细信息的地方。理想的情况是有一个单一的用户存储,使用不同的系统来使用这个单一的源。企业对这样一个存储的需求导致了目录的产生。Novell的edirectory、Microsoft的Active Directory和OpenLDAP都是目录的例子。 在WWW领域,谷歌和Facebook等流行的网络环境允许第三方通过网络服务使用他们的用户存储。 这使外部Web应用程序可以