主頁 > 後端開發 > Keycloak 入門實戰(1)--簡介

Keycloak 入門實戰(1)--簡介

2022-03-27 06:28:43 後端開發

Keycloak 是面向應用和服務的身份認證及訪問控制解決方案,本文主要介紹器基本概念,

1、KeyCloak 概述

Keycloak支持細粒度的授權策略,并且能夠組合不同的訪問控制機制:

  • Attribute-based access control (ABAC): 基于屬性的訪問控制
  • Role-based access control (RBAC): 基于角色的訪問控制
  • User-based access control (UBAC): 基于用戶的用戶控制
  • Context-based access control (CBAC): 基于背景關系的訪問控制
  • Rule-based access control: 基于規則的訪問控制
    • 使用Javascript
  • Time-based access control: 基于時間的訪問控制
  • 通過策略提供程式服務提供程式介面(SPI)支持自定義訪問控制機制(ACMs)

Keycloak 基于一組管理 UI 和一個 RESTful API,它提供了必要的方法來為受保護的資源和作用域創建權限,將這些權限與授權策略相關聯,并在應用程式和服務中強制實施授權決策,

資源服務器(為受保護資源提供服務的應用程式或服務)通常依賴于某種資訊來決定是否應向受保護資源授予訪問權限,對于基于 RESTful 的資源服務器,該資訊通常從安全令牌中獲取;對于依賴會話對用戶進行身份驗證的 Web 應用程式,該資訊通常存盤在會話中,

通常,資源服務器會采用基與角色的訪問控制策略,當用戶試圖訪問受保護資源時,服務器會檢查用戶的角色是否允許訪問請求的資源,但是這一策略有一些缺點:

  • 資源和角色緊密耦合,對角色的更改(如添加、洗掉或更改訪問背景關系)可能會影響多個資源

  • 安全要求變化時可能需要大量修改代碼

  • 如果應用程式較大,角色管理可能會變得困難且容易出錯

  • 它不是最靈活的訪問控制機制,角色不能代表你是誰,并且缺乏背景關系資訊,如果您被授予了某個角色,則您至少具有一定的訪問權限,

考慮到多種多樣的場景,用戶散布在不用的地區,每個地區都有各自的政策,用戶使用不同的設備,并有較高的資訊共享的需求,keycloak的服務授權通過以下方法可以幫助我們提升授權的能力:

  • 使用細粒度的授權策略和不同的訪問控制機制進行資源保護

  • 集中的資源、權限和策略管理

  • 集中式策略決策點

  • REST 的安全基于一組 REST 的授權服務

  • 授權作業流和用戶管理訪問

  • 可避免跨專案(和重新部署)的代碼復制,并快速適應安全要求的變化

2、KeyCloak 架構

 

 從設計角度來看,授權服務基于一組明確定義的授權模式,可提供以下功能:

  • Policy Administration Point (PAP)--策略管理點

    提供一組基于 Keycloak 管理控制臺的 UI,用于管理資源服務器、資源、作用域、權限和策略,其中一部分也是通過使用保護 API 遠程完成的,

  • Policy Decision Point (PDP)--策略決策點

    提供可分發的策略決策點,指向何處發送授權請求,并根據所請求的權限相應地評估策略,

  • Policy Enforcement Point (PEP)--策略實施點

    為不同環境提供實作,以便在資源服務器端實施授權決策,Keycloak 提供了一些內置的策略執行器,

  • Policy Information Point (PIP)--策略資訊點

    基于 Keycloak 身份驗證服務器,您可以在評估授權策略期間從身份和運行時環境中獲取屬性,

3、KeyCloak 核心概念

users:系統用戶,
authentication:認證,
authorization:授權,
credentials:Keycloak 用來驗證用戶身份的憑證,例如密碼、一次性密碼、數字證書甚至指紋,
roles:角色,管理員、用戶、經理和員工都是組織中可能存在的典型角色,應用程式通常將訪問和權限分配給特定的角色,而不是單個用戶,因為與用戶打交道可能過于細粒度且難以管理,
user role mapping:角色和用戶之間的映射,用戶可以與零個或多個角色關聯,
composite roles:組合角色,與其他角色相關聯的角色,例如,superuser組合角色與sales-admin和order-entry-admin角色相關聯,如果一個用戶被映射到superuser角色,那么他們也會繼承sales-admin和order-entry-admin角色,
groups:組,可以為一個組定義屬性,您也可以將角色映射到一個組,成為組成員的用戶繼承該組定義的屬性和角色映射,
realms:域管理一組用戶、憑據、角色和組,用戶屬于并登錄到一個域,域彼此隔離,并且只能管理和驗證它們所控制的用戶,
clients:客戶端是可以請求keycloak對用戶進行身份驗證的物體,通常,客戶端是希望使用Keycloak來保護自己并提供單點登錄解決方案的應用程式和服務,客戶端還可以是只想請求身份資訊或訪問令牌的物體,以便安全地呼叫由Keycloak保護的網路上的其他服務,
client adapters:客戶端配接器是一種插件,您可以將其安裝到應用程式環境中,以便能夠進行通信并通過Keycloak進行保護,Keycloak有許多針對不同平臺的配接器可以下載,您還可以獲取第三方配接器,應用到我們這里沒有提到到的環境中,
consent:同意是指作為管理員,您希望用戶在客戶端可以參與身份驗證程序之前向該客戶端提供權限,在用戶提供了他們的憑證之后,Keycloak將彈出一個螢屏,識別請求登錄的客戶端以及用戶需要的身份資訊,用戶可以決定是否授權請求,
client scopes:客戶端注冊以后,必須為該客戶端定義協議映射器和角色范圍映射,存盤客戶端作用域通常很有用,通過共享一些公共設定來簡化創建新客戶端,這對于根據scope引數的值有條件地請求一些宣告或角色也很有用,Keycloak提供了一個客戶端作用域的概念,
client role:客戶端可以定義特定于他們的角色,這基本上是一個客戶端專有的角色命名空間,
identity token:提供有關用戶身份資訊的令牌,是OpenID Connect規范的一部分,
access token:提供允許呼叫服務的令牌,是OpenID Connect 和 OAuth 2.0規范的一部分,
assertion:關于用戶的資訊,這通常與SAML身份驗證回應中包含的XML blob有關,SAML身份驗證回應提供經過身份驗證的用戶身份元資料,
service account:每個客戶端都有一個內置的服務帳戶,允許它獲得訪問令牌,
direct grant:客戶端通過REST方式獲取用戶訪問令牌,
protocol mappers:協議映射器,確定客戶端使用的協議,
session:會話包含諸如用戶何時登錄以及在會話期間中有哪些應用程式參與單點登錄等資訊,管理員和用戶都可以查看會話資訊,
user federation provider:keycloak可以存盤和管理用戶,通常,公司已經擁有存盤用戶和憑據資訊的LDAP或Active Directory服務,您可以使用Keycloak來驗證這些外部存盤的憑證,并獲取身份資訊,
identity provider:身份提供者(IDP)是一種可以對用戶進行身份驗證的服務,在這里,keycloak就是身份驗證者,
identity provider federation:可以將keycloak配置為將身份驗證委托給一個或多個IDP,通過Facebook或谷歌+進行社交登錄是身份提供者聯合的一個例子,Keycloak可以將身份驗證委托給任何其他OpenID Connect或SAML 2.0 IDP,
identity provider mappers:在進行聯合身份驗證時,可以將傳入的令牌和斷言映射到用戶和會話屬性,這有助于您將身份資訊從外部IDP傳播到請求身份驗證的客戶端,
required actions:必需的操作是用戶在身份驗證程序中必須執行的操作,在這些操作完成之前,用戶將無法完成身份驗證程序,例如,管理員可以安排用戶每月重置密碼,將為所有這些用戶設定一個更新密碼必需的操作,
authentication flows:身份驗證流是用戶在與系統的某些方面進行互動時必須執行的作業流,登錄流可以定義所需的憑據型別,注冊流定義用戶必須輸入什么組態檔資訊,以及是否必須使用諸如reCAPTCHA之類的東西來過濾機器人,憑據重置流定義了用戶在重置密碼之前必須執行的操作,
events:事件,管理員可以查看事件資訊,
themes:主題,Keycloak提供默認主題,可以自定義主題,

4、Keycloak 部署模式

4.1、standalone mode--獨立模式

獨立操作模式僅在您希望運行一個且只有一個 Keycloak 服務器實體時才有用,它不能用于群集部署,并且所有快取都是非分布式的,并且僅本地快取,不建議在生產中使用獨立模式,因為您將遇到單點故障,如果您的獨立模式服務器出現故障,用戶將無法登錄,此模式實際上僅對試用 Keycloak 的功能有用,

此模式對應的組態檔為:standalone/configuration/standalone.xml,對應的啟動腳本為:bin/standalone.sh,

4.2、standalone clustered mode--獨立集群模式

此模式要求您在要運行服務器實體的每臺計算機上都有 Keycloak 分發的副本,此模式最初可能非常容易部署,但可能會變得非常麻煩,若要進行配置更改,請修改每臺計算機上的每個分發,對于大型群集,此模式可能變得耗時且容易出錯,

此模式對應的組態檔為:standalone/configuration/standalone-ha.xml,對應的啟動腳本為:bin/standalone.sh,

4.3、domain clustered mode--域集群模式

域模式是一種集中管理和發布服務器配置的方法,

在標準模式下運行群集可能會隨著群集大小的增長而迅速惡化,每次需要進行配置更改時,都要在群集中的每個節點上執行該更改,域模式通過提供用于存盤和發布配置的中心位置來解決此問題,設定起來可能相當復雜,但最終是值得的,此功能內置于Keycloak派生自的WildFly應用程式服務器中,

下面是域模式的一些基本概念:

process controller--行程控制器

控制其他行程的行程,

domain controller--域控制器

域控制器是一個行程,負責存盤、管理和發布群集中每個節點的常規配置,它是群集中節點獲取其配置的中心點,

host controller--主機控制器

主機控制器負責管理特定計算機上的服務器實體,將其配置為運行一個或多個服務器實體,域控制器還可以與每臺計算機上的主控制器互動以管理群集,為了減少正在運行的行程的數量,域控制器還充當其運行在其上的計算機上的主機控制器,

domain profile--域配置

域配置是一組命名的配置資訊,服務器可以使用它從中進行引導,域控制器可以定義由不同服務器使用的多個域配置,

server group--服務器組

服務器組是服務器的集合,它們作為一個整體進行管理和配置,您可以將域組態檔分配給服務器組,該組中的每個服務都將使用該域組態檔作為其配置,

此模式對應的組態檔為:domain/configuration/domain.xml、domain/configuration/host-master.xml、domain/configuration/host-slave.xml對應的啟動腳本為:bin/domain.sh,

4.4、cross-site replication mode--跨站點復制模式

使用跨站點復制模式在多個資料中心的群集中運行 Keycloak;通常使用的是位于不同地理區域的資料中心站點,使用此模式時,每個資料中心將擁有自己的 Keycloak 服務器集群,

目前跨站點復制模式為技術預覽版,還不完全支持,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/449744.html

標籤:Java

上一篇:Spring Authorization Server 0.2.3發布,放出聯合身份DEMO

下一篇:別再寫垃圾代碼了:試試阿里巴巴 Java 開發插件,打造你的團隊專屬風格。。。

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more