iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0
Software Development

數位醫療與雲原生第一次的親密接觸系列 第 20

Day 20 [雲原生 (Cloud Native) ] 開源IAM Solution---Keycloak

  • 分享至 

  • xImage
  •  

Keycloak 是一個高度可擴展的開源IAM Solution,是最多人使用的開源IAM Solution,能夠整合到各種應用中,並且可以輕鬆適應分布式架構和微服務。且適配於Prometheus等開源監控系統,為建構開源(免費)的分散式系統不可或缺的一環。另外Keycloak是由Redhat基金會出品的,Red hat出品,必屬精品!

核心技術特點:

  • 架構與擴展性:

    • Java 和 JBoss 基礎: Keycloak 使用 Java 開發,運行在 JBoss (WildFly) 應用伺服器上,並採用標準的 Java EE 架構。其插件化的架構允許開發者通過自定義 SPIs (Service Provider Interfaces) 來擴展其功能。
    • Cluster 支持: 支援多節點集群部署,適用於高可用性和高性能需求,且能在分布式系統中保證性能和穩定性。
  • 身份協議:

    • OAuth 2.0 和 OpenID Connect (OIDC): Keycloak 提供完全支持 OAuth 2.0 和 OpenID Connect 標準,允許應用程序使用訪問令牌來進行 API 調用,並通過身份驗證碼交換來保證安全性。
    • SAML 2.0: 為需要傳統身份驗證的應用提供支持,特別適合與企業內部系統進行集成。
  • 授權服務:

    • Keycloak 提供基於 RBAC (基於角色的訪問控制)ABAC (基於屬性的訪問控制) 的授權策略。開發者可以定義基於角色、屬性、用戶屬性或資源的訪問規則,允許精細化的訪問控制。
    • 支援 OAuth 2.0 授權服務功能,允許應用定義和管理自己的資源和範疇(Scopes)。
  • 可擴展的身份驗證流程:

    • SPI 擴展點: Keycloak 提供了靈活的身份驗證流程,可通過擴展點來自定義身份驗證邏輯。開發者可以定義自訂的身份驗證器(Authenticator)來滿足特定業務需求。
    • 多因素身份驗證(MFA): 支援 TOTP(基於時間的一次性密碼)和 OTP,並可以通過 SPI 擴展來集成第三方身份驗證方式(如指紋識別、硬體安全金鑰等)。
  • 客戶端適配器:

    • Keycloak 提供了多種 客戶端適配器(Client Adapter),支援多種語言和框架,包括 Java(Spring Boot,搭配Spring Cloud Security)Node.js等,開發者可以輕鬆將 Keycloak 集成到這些應用中。
    • 適配器提供了許多便利功能,如處理 OAuth 令牌(access_token及refresh_token)的驗證、刷新和撤銷,並簡化了與 Keycloak 伺服器的交互。
  • 部署和自動化:

    • Keycloak 支持容器化部署,官方提供 Docker 映像,並且能與 Kubernetes 無縫集成,允許大規模、動態調度的微服務應用使用身份管理功能。
    • 透過 Helm Charts,開發者能快速部署 Keycloak 到 Kubernetes 集群中,同時可以使用 CI/CD 自動化部署流程,也能使用deployment.yaml部署。
  • Token 管理:

    • JWT (JSON Web Token) 支持: Keycloak 生成的令牌是 JWT 格式,這意味著它們可以輕鬆傳輸並進行驗證。JWT 可以攜帶用戶的身份和權限信息,適合分布式系統中無狀態的驗證方式。
    • 令牌刷新與撤銷: Keycloak 提供了訪問令牌的刷新機制,並支援基於用戶或客戶端的令牌撤銷機制,從而確保用戶的會話安全。

安全性與認證:

  • CSRF、XSS 防護: Keycloak 內建了對常見安全漏洞(如 CSRF、XSS)的防護機制,通過內建的安全協議和檢查,保證應用程序免於這些攻擊。
  • 加密與簽名: 使用加密技術來保護傳輸中的數據,並且支援 JWT 的數字簽名和加密功能,以確保令牌的完整性和保密性。

使用docker-compose建立測試Keycloak

新增docker-compose.yaml

docker-compose.yaml

version: '3'

services:
  postgres:
    image: postgres:15.1
    volumes:
      - /postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: admin
    ports:
      - 5433:5432
  keycloak:
    image: quay.io/keycloak/keycloak:21.1.1
    environment:
      KC_DB: postgres
      KC_HOSTNAME_STRICT: 'false'
      KC_HOSTNAME_STRICT_HTTPS: 'false'
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
      KEYCLOAK_USER: testuser
      KEYCLOAK_PASSWORD: testuser
      KC_DB_URL: 'jdbc:postgresql://postgres:5432/keycloak'
      KC_DB_USERNAME: admin
      KC_DB_PASSWORD: admin
      KC_HEALTH_ENABLED: 'true'
      KC_METRICS_ENABLED: 'true'
      KC_HOSTNAME: localhost
      PROXY_ADDRESS_FORWARDING: "true"


    command:
      - "-v start-dev"
    ports:
      - 8080:8080
    depends_on:
      - postgres

創建volume

docker volume create postgres_data

執行docker-compose指令

docker-compose up

執行成功後輸入 http://localhost:8080/ 出現以下畫面

https://ithelp.ithome.com.tw/upload/images/20240928/20161987kxbKCrhfMN.png

按下'Administration console'

https://ithelp.ithome.com.tw/upload/images/20240928/201619876T1CZjKPJD.png

輸入帳號密碼(此篇管理員帳號密碼為admin,admin)後即可登入

https://ithelp.ithome.com.tw/upload/images/20240928/20161987Xt1VvsnCvx.png

登入後就可以開始探索Keycloak啦!


上一篇
Day 19 [雲原生 (Cloud Native ) ] IAM ( Identity and Access Management ) Module
下一篇
Day 21 [ 雲原生 (Cloud Native )] 新增IAM控管服務
系列文
數位醫療與雲原生第一次的親密接觸30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言