当前位置: 首页 > news >正文

开源身份和访问管理(IAM)解决方案:Keycloak

一、Keycloak介绍

1、什么是 Keycloak?

Keycloak 是一个开源的身份和访问管理(Identity and Access Management - IAM)解决方案。它旨在为现代应用程序和服务提供安全保障,简化身份验证和授权过程。Keycloak 提供了集中式的用户管理、单点登录(Single Sign-On - SSO)、身份联合、社交登录等功能,帮助开发者专注于业务逻辑,而无需从头开始构建复杂的安全系统。

  • 名称:Keycloak

  • 开源地址:https://github.com/keycloak/keycloak

  • 官方网站:Keycloak

  • 开发语言:Java(基于 WildFly 或 Quarkus 构建)

  • 协议:Apache License 2.0

Keycloak 由 Red Hat 领导开发,是 Red Hat SSO 商业版的上游项目。

2、核心概念

理解 Keycloak 的核心概念对于有效使用它至关重要:

  • Realm(域): Realm 是 Keycloak 中最高级别的组织单元,用于隔离不同的环境、组织或租户。每个 Realm 拥有自己独立的用户、角色、客户端和配置。你可以将不同的应用程序或部门放在不同的 Realm 中进行管理。例如,你可以创建一个用于开发环境的 Realm,一个用于生产环境的 Realm,或者为不同的客户创建独立的 Realm。
  • Client(客户端): Client 代表需要 Keycloak 保护的应用程序或服务。可以是 Web 应用程序、移动应用程序、API 等。每个 Client 都需要在 Keycloak 中注册,并配置其访问权限和认证方式。Keycloak 支持多种客户端类型,例如:
    • Confidential: 需要密钥进行认证的客户端,通常用于后端服务或服务器端 Web 应用。
    • Public: 不需要密钥进行认证的客户端,通常用于浏览器端 Web 应用或移动应用。
    • Bearer-only: 仅用于接收和验证 Bearer 令牌的客户端,通常用于受保护的 API。
  • User(用户): User 代表需要访问受保护应用程序或服务的个人或实体。Keycloak 提供用户管理功能,包括创建、删除、更新用户,以及管理用户的凭据(密码、证书等)。用户可以属于一个或多个 Realm。
  • Role(角色): Role 定义了用户在应用程序或服务中拥有的权限。角色可以在 Realm 级别定义(Realm Roles),也可以在特定客户端级别定义(Client Roles)。通过将角色分配给用户,可以控制用户可以执行的操作。例如,可以定义 "admin"、"user"、"editor" 等角色。
  • Group(组): Group 是用户的集合,用于简化角色分配和权限管理。可以将一组用户添加到组中,然后将角色分配给整个组,而不是单独分配给每个用户。组可以形成层级结构。
  • Identity Provider(身份提供者): Identity Provider 是外部的身份验证系统,Keycloak 可以与之集成,实现身份联合。这意味着用户可以使用他们在其他系统(例如:Google、Facebook、GitHub、LDAP、SAML IdP 等)中的凭据登录到受 Keycloak 保护的应用程序。
  • Authentication Flow(认证流): Authentication Flow 定义了用户进行身份验证时需要经历的步骤。Keycloak 提供了灵活的认证流配置,可以根据需求自定义认证过程,例如添加多因素认证(MFA)、CAPTCHA 验证等。
  • Protocol Mapper(协议映射器): Protocol Mapper 用于将 Keycloak 中的用户信息(例如:角色、属性)映射到特定协议(例如:OAuth 2.0、SAML)的令牌声明中。这使得应用程序可以从令牌中获取用户的相关信息。

3、主要功能和特点

Keycloak 提供了丰富的功能,使其成为一个强大的 IAM 解决方案:

  • 单点登录(SSO): 用户只需要登录一次 Keycloak,就可以访问所有受其保护的应用程序和服务,无需为每个应用单独登录。支持标准协议:OpenID Connect(OIDC)、OAuth 2.0、SAML 2.0
  • 身份联合(Identity Federation): 可以集成现有的身份验证系统(例如:LDAP、Active Directory、社交登录提供商),允许用户使用已有的凭据进行登录。
  • 社交登录(Social Login): 支持通过常见的社交媒体账户(例如:Google、Facebook、Twitter、GitHub)进行身份验证,提升用户体验。
  • 用户管理: 提供用户创建、删除、更新、密码管理、用户属性管理等功能。
  • 角色和权限管理: 支持细粒度的角色定义和权限控制,可以基于角色或组来管理用户对应用程序和资源的访问权限。通过 Role-based Access Control(RBAC) 和 Attribute-based Access Control(ABAC) 管理访问权限。可与 Keycloak Authorization Services 配合进行细粒度控制。
  • 多因素认证(MFA): 可以配置多种 MFA 机制,例如基于时间的一次性密码(TOTP)、短信验证码等,提高安全性。
  • OAuth 2.0 和 OpenID Connect 支持: 遵循行业标准协议,方便与各种现代应用程序和服务集成。
  • SAML 2.0 支持: 支持与传统的企业应用程序集成。
  • 细粒度的授权策略: 提供基于属性、角色、时间等多种因素的授权策略,实现更复杂的访问控制。
  • 管理控制台: 提供基于 Web 的管理界面,方便管理员进行配置和管理。
  • RESTful API: 提供丰富的 RESTful API,允许通过编程方式进行管理和集成。
  • 可扩展性: 支持水平扩展,可以处理大量的用户和请求。
  • 自定义性: 允许自定义主题、认证流程、用户属性等。
  • 审计日志: 记录用户的登录、登出、权限变更等操作,方便进行安全审计。

4、架构

Keycloak 的核心是一个服务器,通常部署在一个或多个实例中以实现高可用性。其主要组件包括:

  • Keycloak Server: 负责处理所有的身份验证和授权请求,管理用户、角色、客户端等信息。
  • Database: 用于存储 Keycloak 的配置数据、用户信息、会话信息等。Keycloak 支持多种数据库,例如:PostgreSQL、MySQL、MariaDB、Oracle、SQL Server 等。
  • Admin Console: 基于 Web 的管理界面,用于配置和管理 Keycloak 服务器。
  • Client Adapters: 针对不同编程语言和框架提供的客户端库,简化了应用程序与 Keycloak 的集成。例如:Keycloak Spring Boot Adapter、Keycloak Node.js Adapter 等。

5、使用场景

Keycloak 可以应用于各种场景,包括但不限于:

  • 保护 Web 应用程序: 实现用户身份验证和授权,防止未经授权的访问。
  • 保护 RESTful API: 使用 OAuth 2.0 协议保护后端 API,确保只有授权的客户端可以访问。
  • 单点登录(SSO): 为多个相关的应用程序提供统一的登录体验。
  • 身份联合: 将内部用户目录与外部身份提供者集成,方便用户使用现有账户登录。
  • 微服务安全: 为微服务架构提供统一的身份验证和授权解决方案。
  • SaaS 应用程序: 为多租户 SaaS 应用程序提供安全的身份和访问管理。
  • 物联网(IoT): 管理和认证物联网设备的身份。

6、优势

使用 Keycloak 的主要优势包括:

  • 简化开发: 开发者无需从头开始构建复杂的安全系统,可以专注于业务逻辑。
  • 提高安全性: 提供标准的身份验证和授权机制,降低安全风险。
  • 统一管理: 集中管理用户、角色和权限,方便维护和管理。
  • 提升用户体验: 提供单点登录和社交登录等功能,改善用户体验。
  • 标准化: 基于行业标准协议(OAuth 2.0、OpenID Connect、SAML),易于集成。
  • 开源免费: 可以免费使用,并拥有活跃的社区支持。
  • 高度可定制: 可以根据需求进行定制和扩展。

7、缺点和注意事项

虽然 Keycloak 功能强大,但也需要注意一些方面:

  • 学习曲线: 对于初学者来说,理解其复杂的概念和配置可能需要一定的学习成本。
  • 部署和维护: 需要一定的运维知识来部署、配置和维护 Keycloak 服务器。
  • 性能考虑: 在高并发场景下,需要合理配置和优化 Keycloak 以保证性能。
  • 依赖性: 应用程序需要依赖 Keycloak 进行身份验证和授权,如果 Keycloak 服务不可用,可能会影响应用程序的功能。

8、入门

要开始使用 Keycloak,可以按照以下步骤进行:

  1. 下载 Keycloak: 访问 Keycloak 官方网站下载最新版本的 Keycloak 服务器。
  2. 启动 Keycloak 服务器: 按照官方文档的说明启动 Keycloak 服务器。
  3. 访问管理控制台: 在浏览器中访问 Keycloak 管理控制台(通常是 http://localhost:8080/admin)。
  4. 创建 Realm: 创建一个或多个 Realm 来组织你的应用程序和用户。
  5. 创建 Client: 为你的应用程序注册一个或多个 Client。
  6. 创建 User 和 Role: 创建用户并分配相应的角色。
  7. 配置 Authentication Flow(可选): 根据需求自定义认证流程。
  8. 集成你的应用程序: 使用 Keycloak 提供的客户端适配器或 SDK 将你的应用程序与 Keycloak 集成。

Keycloak 是一个功能强大且灵活的开源 IAM 解决方案,可以帮助你构建安全可靠的应用程序和服务。通过理解其核心概念和功能,你可以有效地利用 Keycloak 来管理用户身份、控制访问权限并提升整体安全性。

二、与相关产品的对比

1、与其他系统对比

功能/系统KeycloakAuth0OktaFirebase Auth
开源/本地部署
多协议支持部分支持
多租户
企业集成能力
社区活跃度高2

2、与IBM ISVA对比

Keycloak 与 IBM Security Verify Access(ISVA,原 IBM Access Manager)都是强大的身份和访问管理解决方案,但它们在定位、架构、功能深度、开源性、部署方式等方面有显著区别。

下面从多个维度来详细对比 KeycloakIBM ISVA

1.产品定位与背景

维度KeycloakIBM ISVA
厂商背景Red Hat(开源),社区主导;Red Hat SSO 为商业支持版IBM,成熟商业产品,定位中大型企业
开源/商业100% 开源(Apache 2.0);Red Hat SSO 为付费支持版本商业授权,闭源;按用户/部署数收费
主要用户群体开发者、云原生团队、SaaS 平台、DevOps大型企业、政企客户、安全审计严格行业(金融、政府)
支持平台任意平台(Kubernetes、Docker、物理机)IBM Cloud、VM、硬件设备、传统基础设施为主

2.架构与部署方式

维度KeycloakIBM ISVA
部署灵活性非常高,支持容器化、Kubernetes、OpenShift较为复杂,推荐配合 WebSeal 网关、Appliance 运行
云原生支持完善,支持 Operator、Helm、K8s有一定支持,但更多是传统部署方式
组件结构轻量级单体(Quarkus/WildFly)+ 可插拔 SPI模块化复杂(AAC、WGA、WebSeal、Policy Server)
运维难度中等(开源文档齐全,需 DevOps 能力)较高(依赖 IBM 专业服务,配置复杂)

3.功能对比

功能模块KeycloakIBM ISVA
身份认证协议支持OAuth2, OIDC, SAML2OAuth2, OIDC, SAML2, WS-Fed
SSO(单点登录)✅ 全面支持✅ 深度支持
身份联合(Federation)✅ 通过 IdP/SAML/OIDC 实现✅ 更强,支持复杂身份桥接
多因素认证(MFA)✅ 支持 TOTP/SMS/WebAuthn✅ 支持丰富硬件/软件 MFA
LDAP/AD 集成✅ 原生支持✅ 强大支持(可多源、同步、映射)
授权服务(RBAC/ABAC)✅ 基于角色 + 资源策略✅ 支持细粒度规则、策略引擎(JAVASCRIPT、XACML)
API 保护✅ OAuth2 Bearer Token✅ 支持 Token、网关策略、多层保护
SOC/审计支持中等(事件系统可拓展)非常强(支持 SIEM 对接、详尽审计)
密码策略支持自定义规则更加严谨、可配复杂策略
高级功能插件自定义灵活,支持 SPI 开发强大的访问网关(WebSeal)、风险引擎、访问控制链路

4.扩展性与集成能力

维度KeycloakIBM ISVA
插件扩展能力非常强(SPI 架构)强,但需 IBM 工具和语言
集成常见 SaaS 应用支持 SAML/OIDC 标准化接入提供大量模板和企业应用连接器
与企业 IT 架构整合能力偏向新架构(微服务、K8s)对传统 IT(SOA、WAS、Portal)支持更好

5.成本对比

项目KeycloakIBM ISVA
软件授权免费商业授权,按用户/服务计费
技术支持社区支持;可选 Red Hat SSO 商业支持IBM 官方支持;费用较高
运维成本相对较低;需 DevOps 技能较高;建议专业团队维护
总体 TCO(总拥有成本)高,但适合合规严格场景

6.使用场景总结

场景更推荐 Keycloak更推荐 IBM ISVA
微服务、容器云
企业微信/钉钉/OIDC 集成
多租户 SaaS 平台✅(Realm 多租户)
高安全级别访问控制中等支持✅ 强大策略系统
传统大型企业安全体系
快速开发、灵活定制❌(开发成本高)

7.总结一句话:

Keycloak 适合快速集成、云原生环境、开源爱好者与 SaaS 项目;而 IBM ISVA 更适合复杂企业架构、高安全/合规需求、传统 IT 系统整合。

3、Keycloak和IBM ISVA的重点差异

和 IBM ISVA 相比,Keycloak 在“后台审计”和“后台授权”这两个企业级关键能力上相对较弱。我们来具体拆解一下这两个点:

1.Keycloak 的后台审计功能:基本够用,但不够“企业级”

✅ Keycloak 的优势:
  • 支持基本事件记录(例如登录成功/失败、用户创建、密码更改等);

  • 可配置事件监听器(Event Listener SPI),将事件导出到:

    • 日志文件(stdout、file);

    • Syslog;

    • Kafka、数据库、自定义 webhook;

  • 能够通过外部工具(如 ELK、Prometheus/Grafana)做二次整合和可视化。

❌ 相对较弱的地方:
  • 无内建的 审计策略引擎(如 ISVA 的 audit framework);

  • 缺乏基于审计事件的风险响应机制(如异常行为触发阻断/预警);

  • 审计事件粒度有限,尤其在访问控制链路、Token 使用路径上不够详细;

  • 不原生支持合规性框架映射(如 GDPR、ISO 27001、SOC 2 等)。 

2.Keycloak 的后台授权功能:适合中等复杂度,难胜任高安全场景

✅ Keycloak 的能力:
  • 支持 RBAC(基于角色)授权:配置用户 → 角色 → 客户端;

  • 支持 资源级访问控制(需启用 Authorization Services):

    • 定义资源、策略、权限;

    • 支持 JS-based 规则、时间、IP、用户属性等;

  • 提供 REST API 用于动态授权校验。

❌ 相对 ISVA 来说的劣势:
项目KeycloakISVA
授权模型深度中(RBAC/简单 ABAC)强(复杂 ABAC、XACML)
风险引擎有(支持行为分析、IP 黑名单等)
细粒度策略管理有限(资源/作用域维度)强(URL 模式、应用上下文、设备状态)
执行性能好(适合轻量级微服务)高(适合关键核心系统)
动态上下文响应手动定制内建风险评估引擎

举例来说,ISVA 可以实现下面这种访问策略:

「当用户使用海外 IP 并且访问敏感资源(如工资系统)时,要求双因素认证且操作记录写入 SIEM。」

而 Keycloak 本体是很难做到这样的上下文感知授权判断的,除非做大量自定义插件开发。

3.总结一句话

Keycloak 擅长轻量级认证与基础授权,适合现代应用快速集成;ISVA 擅长深度授权与合规审计,适合对安全性要求极高的核心系统。

4.建议使用策略(基于场景):

场景推荐用 Keycloak推荐用 ISVA
前端登录认证、移动 App、SPA 接入
对外 SSO、OAuth2 登录联邦
复杂后台权限校验(设备、行为、IP 等)⚠️(需扩展)
合规性强审计(金融、政务)⚠️(需外接 ELK)
异常行为识别、动态授权响应

如果你已经用 Keycloak 接入了新系统,但还在用 ISVA 守护传统系统,可以考虑采用混合架构 —— Keycloak 做前端认证分发,ISVA 做后端审计授权,达到“前轻后重”的最佳效果

4、Keycloak + IBM ISVA 联合使用的混合身份架构图

下面是一个典型的 Keycloak + IBM ISVA 联合使用的混合身份架构图,满足以下目标:

  • ✅ Keycloak 负责现代系统接入、OIDC/SAML 登录、前端认证体验

  • ✅ ISVA 负责核心系统保护、高安全授权、合规审计

  • ✅ 用户通过 Keycloak 登录,部分场景联合跳转至 ISVA;

  • ✅ 可选:共用统一企业 LDAP/AD。 

🧭 架构说明:

┌─────────────────────────────┐
│         用户 / 客户端         │
└────────────┬────────────────┘│  1. 访问前端 / App▼┌──────────────────┐│     Keycloak     │ ◄──────────────────────────────────────────────┐│  (统一登录入口) │                                               │└──────┬───────────┘                                               ││                                                           │┌─────▼───────────────┐                            ┌─────────────▼────────────┐│  OIDC/SAML 登录认证   │                            │      ISVA 身份认证网关     ││(外部 IdP / AD 联合)│ ──▶▶ SAML/OIDC Federation ──▶│     WebSeal + AAC 模块     │└─────┬───────────────┘                            └─────────────┬────────────┘│                                                               │┌──────▼───────────────┐                                               ││ Keycloak 授权 Token   │                                               ││ (JWT / AccessToken) │                                               │└──────┬───────────────┘                                               │▼                                                               ▼┌────────────────────┐                                    ┌────────────────────────┐│  新应用系统 / API网关 │                                    │  核心系统(工资、合同、审批) ││  (基于 OIDC 接入)   │                                    │  (基于 WebSeal 防护)      │└────────────────────┘                                    └────────────────────────┘共用统一 LDAP/AD 目录作为身份源┌─────────────────────────────────────────────┐│     企业 AD / LDAP / HR 系统(身份主目录)     │└─────────────────────────────────────────────┘Keycloak 与 ISVA 可接入统一 SIEM / ELK 审计系统┌─────────────────────────────────────────────┐│      审计平台(SIEM、ELK、Qradar、Splunk)       │└─────────────────────────────────────────────┘

🔍 关键要点解析:

模块说明
Keycloak作为统一身份认证入口,支持 OIDC/SAML 多协议,兼容现代应用。可自定义登录页、支持多租户、多 IdP 联合登录。
ISVA对于需要高安全审计和复杂授权的应用,通过联合认证(Federation)接入 ISVA,由其完成二次身份校验与行为控制。
统一身份源Keycloak 与 ISVA 可共同对接统一 LDAP / AD,实现用户同步与一致性。
SIEM / 审计系统审计日志可分别收集 Keycloak 登录事件与 ISVA 安全事件,汇总进统一平台,增强审计与合规能力。

📌 可选增强项:

  • 可在 Keycloak 启用 事件监听器插件,将事件实时推送至 Kafka / Elastic;

  • ISVA 可配置 风险评估策略,如地理位置 / 异常行为自动触发 MFA;

  • 两者之间的联合登录可通过 SAML2 或 OIDC 联邦桥接方式实现;

  • 可增加 API Gateway(如 Kong、APISIX、3scale)对接 Keycloak 做 API 授权。

 三、本地安装部署Keycloak

1、方法一:使用 Docker (推荐用于本地开发和测试)

Docker 是一个容器化平台,可以让你轻松地运行 Keycloak 而无需担心依赖项和环境配置。

前提条件:

  • 安装 Docker: 确保你的计算机上已经安装了 Docker 和 Docker Compose。你可以从 Docker 官方网站下载并安装:Docker Desktop: The #1 Containerization Tool for Developers | Docker

步骤:

  1. 创建 Docker Compose 文件 (可选但推荐):

    • 创建一个名为 docker-compose.yml 的文件在你的本地目录中。
    • 将以下内容粘贴到文件中:
    version: '3.8'
    services:keycloak:image: quay.io/keycloak/keycloak:latestenvironment:KEYCLOAK_ADMIN: adminKEYCLOAK_ADMIN_PASSWORD: adminports:- "8080:8080"command: ["start-dev"]
    
    • 解释:
      • version: '3.8': 指定 Docker Compose 文件的版本。
      • services:: 定义要运行的服务。
      • keycloak:: 定义名为 keycloak 的服务。
      • image: quay.io/keycloak/keycloak:latest: 指定要使用的 Keycloak Docker 镜像。latest 标签表示使用最新稳定版本。你也可以指定特定的版本号,例如 quay.io/keycloak/keycloak:24.0.0.
      • environment:: 设置 Keycloak 的环境变量。
        • KEYCLOAK_ADMIN: admin: 设置初始管理员用户的用户名。你可以修改为你想要的用户名。
        • KEYCLOAK_ADMIN_PASSWORD: admin: 设置初始管理员用户的密码。强烈建议在生产环境中使用更安全的密码。
      • ports:: 将容器的 8080 端口映射到主机的 8080 端口。这样你就可以通过主机的 8080 端口访问 Keycloak。
      • command: ["start-dev"]: 使用开发模式启动 Keycloak。这适用于本地开发和测试。
  2. 启动 Keycloak:

    • 打开你的终端或命令提示符,导航到包含 docker-compose.yml 文件的目录。
    • 运行以下命令:
      • -d 参数表示在后台运行容器。
    #配置加速
    sudo mkdir -p /etc/docker
    cat <<EOF | sudo tee /etc/docker/daemon.json
    {"registry-mirrors": ["https://dockerproxy.com","https://registry.docker-cn.com","https://mirror.baidubce.com"]
    }
    EOF
    sudo systemctl daemon-reexec
    sudo systemctl restart dockerdocker-compose up -d
    
  3. 访问 Keycloak 管理控制台:

    • 在你的浏览器中访问 http://localhost:8080/.
    • 你应该会看到 Keycloak 的欢迎页面。
    • 点击 "Administration Console"。
    • 使用你在 docker-compose.yml 文件中设置的用户名 (admin) 和密码 (admin) 登录。
  4. 停止 Keycloak:

    • 在终端或命令提示符中,导航到包含 docker-compose.yml 文件的目录。
    • 运行以下命令:
    docker-compose down
    
    • 这会停止并删除 Keycloak 容器。

2、方法二:直接从发行版运行 (Standalone)

这种方法需要你手动下载 Keycloak 的发行版并运行。

前提条件:

  • 安装 Java Development Kit (JDK): Keycloak 需要 Java 11 或更高版本。确保你的计算机上安装了兼容的 JDK,并且 JAVA_HOME 环境变量已正确配置。你可以从 Oracle 或 OpenJDK 下载。
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.deb
sudo dpkg -i jdk-21_linux-x64_bin.deb
sudo apt-get install -f
java -version

步骤:

1.下载 Keycloak 发行版:

  • 访问 Keycloak 官方下载页面:downloads - Keycloak
  • 下载 "Server" 部分的 ZIP 文件 (例如:keycloak-26podm.0.0.zip)。

2.解压发行版:

  • 将下载的 ZIP 文件解压到你想要安装 Keycloak 的本地目录中。
  • 配置数据库:在keycloak-26.2.0/conf目录下nano keycloak.conf
  • 确保安装了数据库,修改之后运行:./bin/kc.sh build
  • 然后创建管理员:./kc.sh bootstrap-admin user

3.运行 Keycloak:

./kc.sh start-dev
  • 打开你的终端或命令提示符,导航到解压后的 Keycloak 目录。
  • 进入 bin 目录。
  • 运行以下命令来启动 Keycloak 的开发模式:
  • 在 Windows 上,使用 kc.bat start-dev

4.访问 Keycloak 管理控制台:

  • 在你的浏览器中访问 http://localhost:8080/.
  • 你应该会看到 Keycloak 的欢迎页面。
  • 点击 "Administration Console"。
  • 由于这是首次运行,你需要创建一个初始的管理员用户。按照屏幕上的提示设置用户名和密码。

5.停止 Keycloak:

  • 在运行 Keycloak 的终端或命令提示符中,按下 Ctrl + C 来停止服务器。

6.配置SSL

生成自签名证书

openssl req -newkey rsa:2048 -nodes -keyout keycloak.key -x509 -days 365 -out keycloak.crt

 找到 Keycloak 配置文件 conf/keycloak.confconf/application.properties,然后添加:

hostname=your-domain.com
http-enabled=false
https-port=443
https-certificate-file=/path/to/keycloak.crt
https-certificate-key-file=/path/to/keycloak.key

 启动

./bin/kc.sh start

配置Nginx或Apahce反向代理

server {listen 443 ssl;server_name your-domain.com;ssl_certificate /path/to/keycloak.crt;ssl_certificate_key /path/to/keycloak.key;location / {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-Forwarded-Proto https;}
}

7.配置用户登录

如果新建的用户无法登录,下图两个不要选择。或者使用有效的TLS证书,如:使用 Let's Encrypt 或其他受信任的证书颁发机构(CA)来配置 HTTPS,而不是自签名证书。

3、方法三:配置带数据库

Step 1:使用国内源拉取 Keycloak 镜像

官方默认是 quay.io/keycloak/keycloak,国内可以用阿里云、DockerHub 镜像加速:

docker pull docker.io/bitnami/keycloak:24

或者配置镜像加速:

sudo mkdir -p /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{"registry-mirrors": ["https://dockerproxy.com","https://registry.docker-cn.com","https://mirror.baidubce.com"]
}
EOF
sudo systemctl daemon-reexec
sudo systemctl restart docker

Step 2:准备数据库(PostgreSQL)

Keycloak 不推荐用 H2 数据库,建议搭配 PostgreSQL:

docker run -d --name keycloak-db \-e POSTGRES_DB=keycloak \-e POSTGRES_USER=keycloak \-e POSTGRES_PASSWORD=123456 \-p 5432:5432 \postgres:15

Step 3:启动 Keycloak(带数据库)

以下命令适配 Keycloak 21+,使用了 Quarkus 模式(默认方式):

docker run -d --name keycloak \-e KC_DB=postgres \-e KC_DB_URL=jdbc:postgresql://host.docker.internal:5432/keycloak \-e KC_DB_USERNAME=keycloak \-e KC_DB_PASSWORD=123456 \-e KEYCLOAK_ADMIN=admin \-e KEYCLOAK_ADMIN_PASSWORD=admin123 \-p 8080:8080 \bitnami/keycloak:24 \start-dev

💡 注意:如果用的是 Linux,需要用 172.17.0.1 或宿主机 IP 替代 host.docker.internal。这个写法在 Windows/macOS 上是成立的,因为 Docker Desktop 对这些系统做了额外处理,让 host.docker.internal 指向宿主机。在 Linux 上,host.docker.internal 是无效的!在容器内,Keycloak 只要访问:172.17.0.1:5432,就等于访问宿主机上开的数据库端口。

宿主机(Linux)
|
|-- Docker bridge 网络:172.17.0.0/16||-- 宿主机网关 IP:172.17.0.1  (容器眼中的宿主机)||-- 容器1(PostgreSQL):172.17.0.2|-- 容器2(Keycloak): 172.17.0.3

Step 4:访问管理界面

浏览器打开:http://localhost:8080
账号:admin
密码:admin123

进入后台后你可以:

  • 创建 Realm、用户、客户端;

  • 配置 SSO、OAuth2;

  • 汉化界面(导入中文包);

  • 启用 SAML/OIDC、Identity Provider。

国内如果下载慢:

sudo nano /etc/docker/daemon.json

 添加如下内容(或合并已有的配置):

{"registry-mirrors": ["https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}

重启Docker服务

sudo systemctl daemon-reexec
sudo systemctl restart docker

4、一键启动脚本(Keycloak + PG)【可直接复制运行】

#!/bin/bash# 启动 PostgreSQL
docker run -d --name keycloak-db \-e POSTGRES_DB=keycloak \-e POSTGRES_USER=keycloak \-e POSTGRES_PASSWORD=123456 \-p 5432:5432 \postgres:15# 启动 Keycloak
docker run -d --name keycloak \-e KC_DB=postgres \-e KC_DB_URL=jdbc:postgresql://host.docker.internal:5432/keycloak \-e KC_DB_USERNAME=keycloak \-e KC_DB_PASSWORD=123456 \-e KEYCLOAK_ADMIN=admin \-e KEYCLOAK_ADMIN_PASSWORD=admin123 \-p 8080:8080 \bitnami/keycloak:24 \start-dev

5、Bonus:使用 docker-compose 快速部署

version: '3.8'
services:postgres:image: postgres:15container_name: keycloak-dbenvironment:POSTGRES_DB: keycloakPOSTGRES_USER: keycloakPOSTGRES_PASSWORD: 123456ports:- "5432:5432"keycloak:image: bitnami/keycloak:24container_name: keycloakdepends_on:- postgresenvironment:KC_DB: postgresKC_DB_URL: jdbc:postgresql://keycloak-db:5432/keycloakKC_DB_USERNAME: keycloakKC_DB_PASSWORD: 123456KEYCLOAK_ADMIN: adminKEYCLOAK_ADMIN_PASSWORD: admin123ports:- "8080:8080"command: start-dev

启动:

docker-compose up -d

6、首次设置 (适用于两种方法)

当你首次访问 Keycloak 管理控制台时,你需要创建一个初始的管理员用户。按照以下步骤操作:

  1. 访问管理控制台: 在浏览器中打开 http://localhost:8080/admin.
  2. 创建管理员用户: 你将被重定向到一个页面,要求你设置管理员用户名和密码。
  3. 登录: 使用你刚刚创建的管理员用户名和密码登录。
  4. 开始使用: 登录成功后,你将进入 Keycloak 管理控制台,可以在这里创建 Realm、Client、User、Role 等。

7、重要注意事项:

  • 开发模式 vs. 生产模式: 上述命令 (start-dev 和 Docker Compose 中的配置) 都是用于开发模式。在生产环境中,你需要使用不同的启动命令和配置,以确保安全性和性能。请参考 Keycloak 的官方文档获取生产环境的部署指南。
  • 端口冲突: 如果你的计算机上已经有其他服务占用了 8080 端口,Keycloak 可能会启动失败。你可以尝试修改 Docker Compose 文件或 Keycloak 的配置文件来更改端口。
  • 数据持久化 (Docker): 在上面的 Docker Compose 配置中,Keycloak 的数据不会持久化。这意味着当你停止并删除容器后,所有数据都会丢失。如果你需要在本地持久化数据,你需要配置 Docker 卷。
  • 数据库配置 (Standalone): 默认情况下,Standalone 模式使用内嵌的 H2 数据库,这不适合生产环境。你可以配置 Keycloak 使用更可靠的外部数据库,例如 PostgreSQL、MySQL 等。

8、简单集成示例(Spring Boot + Keycloak) 

# application.yml 示例
keycloak:realm: myrealmauth-server-url: http://localhost:8080/authresource: my-clientcredentials:secret: xxxxxbearer-only: true
spring:security:oauth2:resourceserver:jwt:issuer-uri: http://localhost:8080/auth/realms/myrealm

相关文章:

开源身份和访问管理(IAM)解决方案:Keycloak

一、Keycloak介绍 1、什么是 Keycloak&#xff1f; Keycloak 是一个开源的身份和访问管理&#xff08;Identity and Access Management - IAM&#xff09;解决方案。它旨在为现代应用程序和服务提供安全保障&#xff0c;简化身份验证和授权过程。Keycloak 提供了集中式的用户…...

Latex科研入门教程

Introduction 这篇文章适合有markdown基础的人看,不会的人可以先去学一下markdown. 仅适用于科研入门. 本文使用的latex环境为overleaf Latex概况 文件格式 以.tex为结尾的文件可能有多个.tex文件最终只编译一个文件,相当于一个文件控制其他子文件. Latex 代码分为三种&…...

CSS 中实现 div 居中有以下几种常用方法

在 CSS 中实现 div 居中有以下几种常用方法&#xff0c;具体取决于需要 ​​水平居中​​、​​垂直居中​​ 还是 ​​两者兼具​​。以下是详细解决方案&#xff1a; 目录 一、水平居中&#xff08;Horizontal Centering&#xff09; 1. 行内块元素&#xff08;Inline-Blo…...

win11修改文件后缀名

一、问题描述 win11系统中&#xff0c;直接添加.py后缀后仍然是txt文本文件 二、处理方式&#xff1a; 点击上方三个小点点击“选项”按钮 点击“查看”取消“隐藏已知文件类型的扩展名”选项点击“应用” 此时&#xff0c;“.txt”文件后缀显示出来了。将txt删去&#xff0c…...

【数据结构和算法】3. 排序算法

本文根据 数据结构和算法入门 视频记录 文章目录 1. 排序算法2. 插入排序 Insertion Sort2.1 概念2.2 具体步骤2.3 Java 实现2.4 复杂度分析 3. 快排 QuickSort3.1 概念3.2 具体步骤3.3 Java实现3.4 复杂度分析 4. 归并排序 MergeSort4.1 概念4.2 递归具体步骤4.3 Java实现4.4…...

k8s之 kube-prometheus监控

Kubernetes 中的 kube-prometheus 是一个基于 Prometheus Operator 的完整监控解决方案&#xff0c;它集成了 Prometheus、Alertmanager、Grafana 以及一系列预定义的监控规则和仪表盘&#xff0c;专为 Kubernetes 集群设计。 一、核心组件介绍 Prometheus Operator &#xf…...

Docker Compose 和 Kubernetes(k8s)区别

前言&#xff1a;Docker Compose 和 Kubernetes&#xff08;k8s&#xff09;是容器化技术中两个常用的工具&#xff0c;但它们的定位、功能和适用场景有显著区别。以下是两者的核心对比&#xff1a; ​​1. 定位与目标​​ ​​特性​​ ​​Docker Compose​​ ​​Kubernet…...

【SpringBoot】HttpServletRequest获取使用及失效问题(包含@Async异步执行方案)

目录 1. 在 Controller 方法中作为参数注入 2.使用 RequestContextHolder &#xff08;1&#xff09;失效问题 &#xff08;2&#xff09;解决方案一&#xff1a; &#xff08;3&#xff09;解决方案二&#xff1a; 3、使用AutoWrite自动注入HttpServletRequest 跨线程调…...

【Easylive】为什么需要手动转换 feign.Response 到 HttpServletResponse

【Easylive】项目常见问题解答&#xff08;自用&持续更新中…&#xff09; 汇总版 为什么需要手动转换 feign.Response 到 HttpServletResponse&#xff1f; feign.Response 是 Feign 客户端调用远程服务后返回的原始 HTTP 响应对象&#xff0c;而 HttpServletResponse 是…...

C语言交换函数:为什么必须用指针传递参数?

写一个简单交换两个变量值的函数,我们要理解C语言中参数传递的机制. C语言中的函数参数默认是按值传递,也就是说,如果我写一个函数,如 void swap(int a,int b) {int tmp a;a b;b tmp; }然后在函数内部交换a,b的值,这不会影响到函数外部的变量,因为传递的是值的副本. 就像…...

C#+Visual Studio 2022为AutoCAD 2022开发插件并显示在Ribbon选项卡

1.插件功能开发 &#xff08;1&#xff09;建立C#类库项目&#xff0c;添加必要引用&#xff0c;都是autocad二次开发相关的&#xff0c;要注意对引用的库修改其“复制文件”属性为false (2)项目调试使用“属性”打开“启用外部程序”&#xff0c;指定为机器上autocad2022的a…...

全景VR是什么?全景VR有什么热门用途?

全景VR的概念与技术特点 全景VR&#xff0c;即虚拟现实全景&#xff0c;是新型的视觉展示技术。通过拍摄和构建三维模拟环境&#xff0c;使浏览者能够通过网络获得三维立体的空间感觉&#xff0c;仿佛身临其境。全景VR技术的核心在于360全景图像的捕捉和展示&#xff0c;它允许…...

美创科技20周年庆典顺利举行

2025年4月19日 美创科技成立20周年 “稳健前行二十载&#xff0c;创新共赢新未来” 美创科技周年庆典在杭州总部顺利举行 美创科技20周年庆典精彩视频回顾 &#xff08;点击查看美创科技20周年庆典精彩视频回顾&#xff09; CEO致辞 20周年再出发&#xff0c;开启新增长周期…...

学习笔记二十二—— 并发五大常见陷阱

⚠️ 并发五大常见陷阱 目录 数据竞争 (Data Race)死锁 (Deadlock)竞态条件 & 饿死现象 (Race Condition & Starvation)悬挂指针 (Dangling Pointer)重复释放 (Double Free)开发自查清单 1. 数据竞争 (Data Race) 专业定义 两个及以上线程在缺乏同步的情况下同时访问同…...

精益数据分析(10/126):深度剖析数据指标,驱动创业决策

精益数据分析&#xff08;10/126&#xff09;&#xff1a;深度剖析数据指标&#xff0c;驱动创业决策 在创业的旅程中&#xff0c;数据指标是我们把握方向的关键工具。今天&#xff0c;我想和大家一起深入学习《精益数据分析》中关于数据指标的知识&#xff0c;共同探索如何利…...

冒泡排序详解

void bubbleSort(std::vector& arr) { int n arr.size(); for (int i 0; i < n-1 ; i) { // 需要 n-1 轮 原理是 3个元素 两轮比交即可 10个元素9轮比较即可 bool swapped false; // 用于优化&#xff0c;检测是否发生交换 for (int j 0; j < n - i -1 ; j) { //…...

小刚说C语言刷题——1039 求三个数的最大数

1.题目描述 已知有三个不等的数&#xff0c;将其中的最大数找出来。 输入 输入只有一行&#xff0c;包括3个整数。之间用一个空格分开。 输出 输出只有一行&#xff08;这意味着末尾有一个回车符号&#xff09;&#xff0c;包括1个整数。 样例 输入 1 5 8 输出 8 2.…...

【日志体系】ELK Stack与云原生日志服务

IaaS日志体系&#xff1a;ELK Stack与云原生日志服务 一、技术演进的双重脉络二、架构设计的范式差异三、关键技术突破解析四、前沿发展与行业实践 当某国际电商平台在"黑色星期五"遭遇每秒百万级日志洪峰时&#xff0c;其运维团队通过混合日志架构实现全链路追踪&am…...

spark和hadoop区别联系

区别 设计理念 Hadoop&#xff1a;主要解决大规模数据的存储和处理问题&#xff0c;其核心是 Hadoop 分布式文件系统&#xff08;HDFS&#xff09;和 MapReduce 计算模型。HDFS 用于存储大规模数据&#xff0c;MapReduce 用于处理数据&#xff0c;它将数据处理过程分为 Map 和…...

240422 leetcode exercises

240422 leetcode exercises jarringslee 文章目录 240422 leetcode exercises[237. 删除链表中的节点](https://leetcode.cn/problems/delete-node-in-a-linked-list/)&#x1f501;节点覆盖法 [392. 判断子序列](https://leetcode.cn/problems/is-subsequence/)&#x1f501;…...

【上位机——MFC】菜单类与工具栏

菜单类 CMenu&#xff0c;封装了关于菜单的各种操作成员函数&#xff0c;另外还封装了一个非常重要的成员变量m_hMenu(菜单句柄) 菜单使用 添加菜单资源加载菜单 工具栏相关类 CToolBarCtrl-》父类是CWnd&#xff0c;封装了关于工具栏控件的各种操作。 CToolBar-》父类是CC…...

Spark-SQL连接Hive总结及实验

一、核心模式与配置要点 1. 内嵌Hive 无需额外配置&#xff0c;直接使用&#xff0c;但生产环境中几乎不使用。 2. 外部Hive&#xff08;spark-shell连接&#xff09; 配置文件&#xff1a;将hive-site.xml&#xff08;修改数据库连接为node01&#xff09;、core-site.xml、…...

20.3 使用技巧9

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的 20.3.13 DataGridView使用日期选择控件 有时为了输入方便或者固定日期格式&#xff0c;可以考虑点击DataGridView中某个单元格时出现…...

逻辑回归(Logistic Regression)

逻辑回归&#xff08;Logistic Regression&#xff09; 原理 通过 Sigmoid函数&#xff08; σ ( z ) 1 1 e − z σ(z) \frac{1}{1e^{-z}} σ(z)1e−z1​&#xff09;将线性回归输出 z w T x b z w^Tx b zwTxb 映射到 [0,1] 区间输出值表示样本属于正类的概率&#…...

weblogic12 部署war包 项目运行报错

问题表现 weblogic12 部署war包项目成功&#xff0c;运行启动成功。但是在使用此项目的时候&#xff0c;点击任何功能都会报错&#xff0c;部分报错如下&#xff1a; at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.…...

重新定义户外防护!基于DeepSeek的智能展开伞棚系统技术深度解析

从“手动操作”到“感知决策”&#xff0c;AI重构城市空间弹性 全球极端天气事件频发&#xff0c;传统伞棚依赖人工展开/收纳&#xff0c;存在响应滞后&#xff08;暴雨突袭时展开需3-5分钟&#xff09;、抗风能力弱&#xff08;8级风损毁率超60%&#xff09;、空间利用率低等痛…...

Android15沉浸式界面顶部有问题

Android15沉浸式界面顶部有问题 往往开发人员的手机没这么高级&#xff0c;客户或者老板的手机是Android15的。 我明明就设了状态栏透明&#xff0c;我的手机也没问题。但Android15是有问题的。 先看下有问题的界面&#xff1a; 解决方案&#xff1a; 处理1&#xff1a; if (…...

git比较不同分支的不同提交文件差异

背景&#xff1a;只想比较某2个分支的某2次提交的差异&#xff0c;不需要带上父提交。 以commitA为基准&#xff0c;用commitB去比较差异 直接上代码&#xff1a; #!/bin/bashcommitAd347dad9f25fb17db89eadcec7ea0f1bacbf7d29 commitBa6cc0c1a863b5c56d5f48bff396e4cd6966e…...

ADB -> pull指令推送电脑文件到手机上

ADB Push命令 在Android开发中&#xff0c;ADB的push命令用于将文件从电脑传输到Android设备上&#xff0c;是开发和测试过程中的重要工具 基本语法 adb push <本地文件路径> <设备目标路径><本地文件路径>&#xff1a;必需参数&#xff0c;指定要推送的本…...

compat-openssl10和libnsl下载安装

在麒麟系统&#xff08;如银河麒麟&#xff09;中&#xff0c;compat-openssl10 和 libnsl 是一些软件&#xff08;如 MySQL、Oracle 等&#xff09;的依赖包&#xff0c;用于提供兼容性支持。以下是它们的下载方法&#xff1a; 1. 下载 compat-openssl10 compat-openssl10 是…...

‌射频功率放大器的核心工作机制与组件设计

以下是关于射频功率放大器工作原理的详细说明&#xff1a; 射频功率放大器&#xff08;RF PA&#xff09;是无线通信系统的核心组件&#xff0c;其功能基于能量转换与信号放大技术。它通过精确的能量控制与信号处理&#xff0c;将低功率射频信号转化为高功率输出&#xff0c;支…...

制作一款打飞机游戏12:初稿原型

当前进展 ‌任务回顾‌&#xff1a;在之前&#xff0c;我们做了大量的规划和原型设计。我们创建了关卡&#xff0c;添加了侧向滚动和BOSS模式背景重复&#xff0c;还制作了一个紧凑的瓦片集。‌原型完成‌&#xff1a;我们完成了五个原型&#xff0c;基本实现了飞机飞行、滚动…...

C语言高频面试题——指针数组和数组指针

指针数组和数组指针是 C/C 中容易混淆的两个概念&#xff0c;以下是详细对比&#xff1a; 1. 指针数组&#xff08;Array of Pointers&#xff09; 定义&#xff1a;一个数组&#xff0c;其元素是 指针类型。语法&#xff1a;type* arr[元素个数]; 例如&#xff1a;int* ptr_a…...

爱普生TG-5006CG成为提升5G RedCap时钟同步精度的理想选择

在 5G 通信技术持续演进的进程中,5G RedCap&#xff08;Reduced Capability,即降低能力&#xff09;是5G技术中针对物联网场景优化的一种轻量化标准。它通过降低终端带宽、简化天线配置和调制方式等手段&#xff0c;大幅降低了终端设备的成本和功耗&#xff0c;同时继承了5G NR…...

用Mac M4构建多架构Docker镜像指南

使用Mac M4构建多架构Docker镜像指南 解决问题&#xff1a;WARNING: The requested image‘s platform (linux/amd64) does not match the detected host platform &#x1f4cc; 重点&#xff1a;为什么需要双栈架构镜像&#xff1f; 双栈架构镜像&#xff08;同时支持ARM64和…...

PCB原理图解析(炸鸡派为例)

晶振 这是外部晶振的原理图。 32.768kHz 的晶振&#xff0c;常用于实时时钟&#xff08;RTC&#xff09;电路&#xff0c;因为它的频率恰好是一天的分数&#xff08;32768 秒&#xff09;&#xff0c;便于实现秒计数。 C25 和 C24&#xff1a;两个 12pF 的电容&#xff0c;用于…...

GPU高效利用率实战揭秘:蓝耘元生代VS传统云平台的降维打击

文章目录 一、前言&#xff1a;AI算力革命与蓝耘元生代的崛起二、蓝耘元生代智算云核心架构解析2.1 技术基石&#xff1a;Kubernetes原生云与蜂巢式资源网络关键创新点&#xff1a; 2.2 核心功能模块 三、蓝耘元生代快速入门指南3.1 注册与资源申请3.2 实战案例&#xff1a;部署…...

EXCEL学习

一、基本计算 求和 SUM(区域)&#xff1a;计算区域内数值总和。示例&#xff1a;SUM(A1:A10) 计算A1到A10的和。 平均值 AVERAGE(区域)&#xff1a;计算区域内数值的平均值。示例&#xff1a;AVERAGE(B1:B10) 计算B1到B10的平均值。 计数 COUNT(区域)&#xff1a;统计区域内非…...

PyTorch 线性回归详解:模型定义、保存、加载与网络结构

目录 前言一、pytorch框架线性回归1.1 pytorch模型的定义1.2 nn.Sequential()1.2.1 nn.Linear1.2.2 nn.Sequential 1.3 nn.ModuleList()1.4 nn.ModuleDict()1.5 nn.Module二、pytorch模型的保存2.1 保存模型的权重和其他参数2.1.1 torch.save()保存字典总结 前言 书接上文 自…...

基础服务系列-Jupyter Notebook 支持JavaScript

IJavascript is a Javascript kernel for the Jupyter notebook. npm install npm i -g ijavascript 报以上错误&#xff0c;执行以下命令。 npm i -g ijavascript --unsafe-perm 说明&#xff1a;npm会有生命周期&#xff0c;某个包会有生命周期来执行一些东西&#xff0c;…...

LabVIEW数据采集与传感系统

开发了一个基于LabVIEW的智能数据采集系统&#xff0c;该系统主要通过单片机与LabVIEW软件协同工作&#xff0c;实现对多通道低频传感器信号的有效采集、处理与显示。系统的设计旨在提高数据采集的准确性和效率&#xff0c;适用于各种需要高精度和低成本解决方案的工业场合。 项…...

如何编写单元测试

一.如何编写单元测试 下面我们以 fetchEnv 方法作为案例&#xff0c;编写一套完整的单元测试用例供读者参考 编写 fetchEnv 方法 ./src/utils/fetchEnv.ts 文件 /*** 环境参数枚举*/enum IEnvEnum {DEV dev, // 开发TEST test, // 测试PRE pre, // 预发PROD prod, // 生…...

【网络编程】从零开始彻底了解网络编程(三)

本篇博客给大家带来的是网络编程的知识点. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快乐顺便进步 TCP流…...

华为OD机试真题——数据分类(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析&#xff1b; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式&#xff01; 本文收录于专栏&#xff1a;《2025华为OD真题目录全流程解析/备考攻略/经验…...

3步拆解Linux内核源码的思维模型

3步拆解Linux内核源码的思维模型 ——从“不敢碰”到“庖丁解牛” 一、第一步&#xff1a;资料收集与框架搭建——像拼图一样找到“地图” 初看Linux内核源码的人&#xff0c;往往会被其千万行代码淹没。但正如登山前需要地形图&#xff0c;阅读内核前必须构建认知框架。 1…...

图像预处理-图像轮廓特征查找

其实就是外接轮廓&#xff0c;有了轮廓点就可以找到最上、最下、最左、最右的四个坐标&#xff08;因为有xmin,xmax,ymin,ymax&#xff09;。就可以绘制出矩形。 一.外接矩形 cv.boundingRect(轮廓点) - 返回x,y,w,h&#xff0c;传入一个轮廓的轮廓点&#xff0c;若有多个轮廓需…...

布尔差分法解析:从逻辑导数到电路优化

#布尔差分法解析&#xff1a;从逻辑导数到电路优化 一、背景数学知识&#xff1a;布尔代数基础 布尔变量与函数 在布尔代数中&#xff0c;变量的取值只有 0&#xff08;表示假&#xff09;和 1&#xff08;表示真&#xff09;。例如&#xff0c;一个布尔变量 x 可以取 0 或 1。…...

【NVIDIA】Isaac Sim 4.5.0 加载 Franka 机械臂

目录 一、NVIDIA Isaac Sim 4.5.0二、Isaac Sim 4.5.0 核心特性解析1. 基于 Omniverse 的跨平台仿真框架2. 模块化机器人开发架构3. 面向AI的强化学习支持 三、Isaac Sim 4.5.0 仿真环境搭建四、加载 Franka 机械臂1. Python源码2. 代码解析&#xff08;按执行流程&#xff09;…...

边缘计算场景下的GPU虚拟化实践(基于vGPU的QoS保障与算力隔离方案)

在智慧交通、工业质检等边缘计算场景中&#xff0c;GPU虚拟化技术面临严苛的实时性与资源隔离挑战。本文基于NVIDIA vGPU与国产算力池化方案&#xff0c;深入探讨多租户环境下算力隔离的工程实践&#xff0c;并给出可复用的优化策略。 一、边缘GPU虚拟化的核心痛点 ‌动态负载…...

使用go-git同步文件到gitee

go-git是golang上纯go实现的git客户端&#xff0c;可用来同步文件到git仓库。 为什么不用gitee官方openapi&#xff0c;因为我需要强制推送覆盖&#xff0c;官方api不支持。 下面是一个通过xml.gz文件到gitee的代码示例 package clientimport ("fmt""gin-epg…...