keycloak-extension-playground深度解析:用户存储(User Storage)扩展开发详解
keycloak-extension-playground深度解析用户存储(User Storage)扩展开发详解【免费下载链接】keycloak-extension-playgroundSimple project environment for creating custom Keycloak extensions项目地址: https://gitcode.com/gh_mirrors/ke/keycloak-extension-playgroundkeycloak-extension-playground是一个专注于Keycloak扩展开发的开源项目环境为开发者提供了丰富的用户存储扩展示例。本文将深入探讨如何利用该项目进行用户存储扩展开发帮助新手快速掌握Keycloak用户存储集成的核心技术。为什么需要用户存储扩展在企业级应用中用户数据往往存储在多样化的系统中如LDAP服务器、关系型数据库或其他身份管理系统。Keycloak的用户存储扩展功能允许将这些外部用户数据源无缝集成到Keycloak中实现统一身份认证和授权。keycloak-extension-playground提供了多种用户存储扩展实现包括LDAP用户存储扩展custom-ldap-user-storage-provider/src/main/java/com/github/thomasdarimont/keycloak/ldap/CustomLdapUserStorageProvider.java远程Keycloak联邦存储remote-keycloak-federation/src/main/java/com/github/thomasdarimont/keycloak/federation/RemoteKeycloakUserStorageProvider.java轻量级用户存储flyweight-user-storage-provider-extension/src/main/java/com/github/thomasdarimont/keycloak/userstorage/flyweight/FlyweightAcmeUserStorageProvider.java用户存储扩展核心接口Keycloak用户存储扩展开发主要涉及以下核心接口UserStorageProvider所有用户存储扩展的基础接口定义了生命周期方法public interface UserStorageProvider extends Provider { void close(); }UserLookupProvider用户查找接口实现用户的基本查询功能public interface UserLookupProvider { UserModel getUserById(String id, RealmModel realm); UserModel getUserByUsername(String username, RealmModel realm); UserModel getUserByEmail(String email, RealmModel realm); }CredentialInputValidator凭证验证接口用于验证用户密码等凭证public interface CredentialInputValidator { boolean supportsCredentialType(String credentialType); boolean isConfiguredFor(RealmModel realm, UserModel user, String credentialType); boolean isValid(RealmModel realm, UserModel user, CredentialInput input); }实战自定义LDAP用户存储扩展扩展LDAPStorageProviderkeycloak-extension-playground中的CustomLdapUserStorageProvider展示了如何扩展Keycloak的LDAP存储提供器public class CustomLdapUserStorageProvider extends LDAPStorageProvider { Override public boolean removeUser(RealmModel realm, UserModel user) { // 自定义删除逻辑禁用用户而非真正删除 user.setEnabled(false); return true; } // 工厂类实现 AutoService(UserStorageProviderFactory.class) public static class Factory extends LDAPStorageProviderFactory { Override public String getId() { return custom-ldap; } Override public String getHelpText() { return Custom LDAP User Store which disables users on remove.; } } }远程Keycloak用户联邦RemoteKeycloakUserStorageProvider实现了跨Keycloak实例的用户联邦允许从远程Keycloak服务器查询和验证用户public class RemoteKeycloakUserStorageProvider implements UserStorageProvider, UserLookupProvider, CredentialInputValidator { Override public UserModel getUserByUsername(String username, RealmModel realm) { // 先检查本地用户 UserModel localUser session.userLocalStorage().getUserByUsername(realm, username); if (localUser ! null) { return localUser; } // 从远程Keycloak查询用户 ListUserRepresentation users getRemoteKeycloak().getUserByUsername( componentModel.get(realm), username, false); if (users null || users.isEmpty()) { return null; } return toAdapter(realm, users.get(0)); } Override public boolean isValid(RealmModel realm, UserModel user, CredentialInput credentialInput) { // 通过远程Keycloak验证用户凭证 AccessTokenResponse accessTokenResponse getRemoteKeycloak().validatePassword( componentModel.get(realm), componentModel.get(clientId), componentModel.get(clientSecret), user.getUsername(), credentialInput.getChallengeResponse(), OAuth2Constants.PASSWORD, profile email); return accessTokenResponse ! null; } }轻量级用户存储实现FlyweightAcmeUserStorageProvider展示了一种轻量级用户存储实现采用享元模式减少内存占用public class FlyweightAcmeUserStorageProvider implements UserStorageProvider, UserLookupProvider, UserQueryProvider, CredentialInputUpdater, CredentialInputValidator { private final AcmeUserRepository repository; Override public UserModel getUserByUsername(String username, RealmModel realm) { return createAdapter(realm, repository.findUserByUsernameOrEmail(username)); } protected UserModel createAdapter(RealmModel realm, AcmeUser acmeUser) { if (acmeUser null) { return null; } return new AcmeUserAdapter(session, realm, storageComponentModel, acmeUser); } Override public boolean isValid(RealmModel realm, UserModel user, CredentialInput input) { if (!supportsCredentialType(input.getType()) || !(input instanceof UserCredentialModel)) { return false; } UserCredentialModel cred (UserCredentialModel) input; return repository.validateCredentials(user.getUsername(), cred.getValue()); } }用户存储扩展的配置与使用配置认证流程在Keycloak管理控制台中您需要配置认证流程以使用自定义用户存储提供器。以下是一个典型的浏览器认证流程配置界面配置用户存储提供器为您的用户存储扩展配置必要的参数如角色名称、客户端ID等处理访问控制用户存储扩展可以与Keycloak的授权机制结合实现基于角色的访问控制。当用户没有所需角色时将显示访问被拒绝的错误页面如何开始开发克隆项目仓库git clone https://gitcode.com/gh_mirrors/ke/keycloak-extension-playground选择一个用户存储扩展示例作为起点如custom-ldap-user-storage-providerremote-keycloak-federationflyweight-user-storage-provider-extension根据您的需求修改代码实现自定义逻辑使用Maven构建扩展mvn clean install将生成的JAR文件部署到Keycloak的standalone/deployments目录总结keycloak-extension-playground提供了丰富的用户存储扩展示例涵盖了从LDAP集成到远程Keycloak联邦的多种场景。通过本文的介绍您应该对Keycloak用户存储扩展开发有了深入的了解。无论是企业级LDAP集成还是跨系统用户联邦Keycloak的用户存储扩展机制都能满足您的需求。希望本文能帮助您快速掌握Keycloak用户存储扩展开发如有任何问题欢迎查阅项目中的示例代码或相关文档。【免费下载链接】keycloak-extension-playgroundSimple project environment for creating custom Keycloak extensions项目地址: https://gitcode.com/gh_mirrors/ke/keycloak-extension-playground创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

5分钟上手PyPtt:从安装到发第一篇文章的快速入门教程

5分钟上手PyPtt:从安装到发第一篇文章的快速入门教程

5分钟上手PyPtt:从安装到发第一篇文章的快速入门教程 【免费下载链接】PyPtt The best PTT library 项目地址: https://gitcode.com/gh_mirrors/py/PyPtt PyPtt是一款功能强大的PTT(批踢踢实业坊)库,能帮助开发者轻松实现与…

2026/7/28 9:06:41 阅读更多 →
AI-Native 云原生架构:2026 年从容器编排到智能体编排的范式革命

AI-Native 云原生架构:2026 年从容器编排到智能体编排的范式革命

AI-Native 云原生架构:2026 年从容器编排到智能体编排的范式革命一、引言:2026,云原生进入 AI-Native 时代如果你还在把 Kubernetes 当作"容器编排平台"来看待,那你可能已经错过了云原生历史上最重要的一次范式迁移。20…

2026/7/28 4:37:52 阅读更多 →
为什么选择ChopChop?5大核心功能彻底解决敏感服务暴露问题

为什么选择ChopChop?5大核心功能彻底解决敏感服务暴露问题

为什么选择ChopChop?5大核心功能彻底解决敏感服务暴露问题 【免费下载链接】ChopChop ChopChop is a CLI to help developers scanning endpoints and identifying exposition of sensitive services/files/folders. 项目地址: https://gitcode.com/gh_mirrors/c…

2026/7/28 21:07:10 阅读更多 →

最新新闻

Python爬虫实战:自动采集Epic免费游戏数据

Python爬虫实战:自动采集Epic免费游戏数据

1. 项目背景与核心价值 Epic Games每周免费游戏的福利活动已经持续多年,成为PC玩家获取正版游戏的重要渠道。但官方并未提供完整的历史免费游戏清单,这给想要回顾或统计数据的玩家带来不便。作为一名游戏爱好者和Python开发者,我决定写一个爬…

2026/7/28 23:44:13 阅读更多 →
权限日志没做好,大模型项目上线就崩?数据工程师的转型实战复盘

权限日志没做好,大模型项目上线就崩?数据工程师的转型实战复盘

这篇我按“先跑起来、再讲取舍”的方式写《别急着换赛道:大数据经验在 AI 项目里到底值多少?》。概念会讲,但重点放在代码怎么组织、哪里容易踩坑。摘要本文以一个大模型应用从 Demo 到生产环境的落地经历为线索,探讨大数据背景下…

2026/7/28 23:44:13 阅读更多 →
开源模型微调成功率为何低于31%?——基于Hugging Face 2024 Q2真实提交日志的失败根因分析报告

开源模型微调成功率为何低于31%?——基于Hugging Face 2024 Q2真实提交日志的失败根因分析报告

更多请点击: https://codechina.net 第一章:开源模型微调成功率为何低于31%?——问题定义与现象洞察 在2023–2024年主流开源社区(Hugging Face、GitHub、OSS Chat)的1,287个微调实践案例中,仅392例成功部…

2026/7/28 23:44:13 阅读更多 →
从碎片化提示到闭环式智能:揭秘我如何用3层架构(感知-决策-执行)重构个人AI工作流

从碎片化提示到闭环式智能:揭秘我如何用3层架构(感知-决策-执行)重构个人AI工作流

更多请点击: https://codechina.net 第一章:从碎片化提示到闭环式智能:揭秘我如何用3层架构(感知-决策-执行)重构个人AI工作流 过去,我的AI协作常陷于“即兴提问—零散响应—手动整合”的碎片循环&#xf…

2026/7/28 23:44:13 阅读更多 →
eBPFSnitch UI使用教程:可视化管理Linux应用网络访问

eBPFSnitch UI使用教程:可视化管理Linux应用网络访问

eBPFSnitch UI使用教程:可视化管理Linux应用网络访问 【免费下载链接】ebpfsnitch Linux Application Level Firewall based on eBPF and NFQUEUE. 项目地址: https://gitcode.com/gh_mirrors/eb/ebpfsnitch eBPFSnitch是一款基于eBPF和NFQUEUE的Linux应用级…

2026/7/28 23:44:13 阅读更多 →
MPark.Variant单元测试全解析:确保你的变体类型代码无懈可击

MPark.Variant单元测试全解析:确保你的变体类型代码无懈可击

MPark.Variant单元测试全解析:确保你的变体类型代码无懈可击 【免费下载链接】variant C17 std::variant for C11/14/17 项目地址: https://gitcode.com/gh_mirrors/varia/variant MPark.Variant是一个为C11/14/17提供std::variant功能的开源项目&#xff0c…

2026/7/28 23:43:10 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻