使用 Postman 訪問 Keycloak 端點

1. 引言

在本教程中,我們將首先快速回顧 OAuth 2.0、OpenID 和 Keycloak。然后,我們將了解 Keycloak REST API 以及如何在 Postman 中調用它們。

2. OAuth 2.0

OAuth 2.0 是一個授權框架,它允許經過身份驗證的用戶通過令牌向第三方授予訪問權限。令牌通常僅限于某些生命周期有限的范圍。因此,它是用戶憑證的安全替代方案。

OAuth 2.0 帶有四個主要組件:

  • Resource Owner(資源所有者) – 擁有受保護資源或數據的最終用戶或系統

  • Resource Server(資源服務器) – 該服務通常通過基于 HTTP 的 API 公開受保護的資源

  • Client(客戶端) – 代表資源所有者調用受保護的資源

  • Authorization Server(授權服務器) – 頒發 OAuth 2.0 令牌,并在對資源所有者進行身份驗證后將其交付給客戶端

OAuth 2.0 是一種具有一些標準流的協議,我們在此重點設計一下授權服務器組件。

3. OpenID 連接

OpenID Connect 1.0 (OIDC) 構建在 OAuth 2.0 之上,用于向協議添加身份管理層。因此,它允許客戶端通過標準 OAuth 2.0 流程驗證最終用戶的身份并訪問基本配置文件信息。OIDC 向 OAuth 2.0 引入了一些標準范圍,例如 openidprofileemail

4. Keycloak 作為授權服務器

**JBoss 開發了 Keycloak 作為基于 Java 的開源身份和訪問管理解決方案。 **除了支持 OAuth 2.0 和 OIDC 之外,它還提供身份代理、用戶聯合和 SSO 等功能。

我們可以將 Keycloak 用作帶有管理控制臺的獨立服務器,或將其嵌入到 Spring 應用程序中。一旦我們以這兩種方式中的任何一種運行了 Keycloak,我們就可以嘗試訪問其端點。

5. Keycloak 端點

Keycloak 為 OAuth 2.0 流程提供了各種 REST 端點。要在 Postman 中使用這些端點,我們首先要創建一個名為 “Keycloak” 的環境。然后,添加一些鍵值對,用于設置 Keycloak 授權服務器的 URL、領域、OAuth 2.0 客戶端 ID 和客戶端密碼:
在這里插入圖片描述

5.1. OpenID 配置端點

配置終端節點類似于根目錄。它返回所有其他可用終端節點、支持的范圍和聲明以及簽名算法。

讓我們在 Postman 中創建一個請求:{{server}}/realms/{{realm}}/.well-known/openid-configuration。Postman 在運行時從所選環境中設置 {{server}} 和 {{realm}} 的值:

然后我們將執行請求,如果一切順利,我們將得到一個響應:
在這里插入圖片描述
如前所述,我們可以在響應中看到所有可用的終端節點,例如 “authorization_endpoint”、“token_endpoint” 等。

此外,響應中還有其他有用的屬性。例如,我們可以從 “grant_types_supported” 中找出所有支持的授權類型,或者從 “scopes_supported” 中找出所有支持的作用域。

5.2. 授權端點

讓我們繼續了解負責 OAuth 2.0 授權代碼流程的授權端點。它在 OpenID 配置響應中以 *“authorization_endpoint” *的形式提供。

授權端點:{{server}}/realms/{{realm}}/protocol/openid-connect/auth?response_type=code&client_id={{clientId}}

此外,此端點接受 scoperedirect_uri 作為可選參數。

我們不會在 Postman 中使用此端點,通常通過瀏覽器發起授權碼流程。如果沒有有效的登錄 cookie,Keycloak 會將用戶重定向到登錄頁面。最后,授權碼會被發送到重定向 URL。接下來,我們將了解如何獲取訪問令牌。

5.3. 令牌端點

令牌終端節點允許我們檢索訪問令牌、刷新令牌或 id 令牌。OAuth 2.0 支持不同的授權類型,例如 authorization_code、refresh_token password。

令牌端點:{{server}}/realms/{{realm}}/protocol/openid-connect/token

但是,每種授權類型都需要一些專用的表單參數。

5.3.1. 授權碼流程

我們將首先測試令牌端點,以獲取code(授權碼)對應的訪問令牌。請求正文中傳遞這些表單參數:client_idclient_secretgrant_typecoderedirect_uri。令牌終端節點還接受 scope 作為可選參數:

模擬獲得code
  1. 瀏覽器訪問:

    http://192.168.1.212:8080/realms/cemx/protocol/openid-connect/auth?response_type=code&client_id=cemc-client&redirect_uri=http://192.168.1.128:8081/login/oauth2/code/keycloak

  2. 在登錄界面里面輸入用戶名和密碼

  3. 查看瀏覽器網絡訪問
    在這里插入圖片描述
    通過code獲得Token

在這里插入圖片描述

5.3.2. 用戶名密碼流程

如果我們想繞過授權碼流程,可以選擇 password 授權類型。這里我們需要用戶憑證,因此當我們的網站或應用程序中有內置登錄頁面時,可以使用此流程。讓我們創建一個 Postman 請求,并在正文中傳遞表單參數 client_id、client_secret、grant_type、username 和 password:
在這里插入圖片描述

在執行此請求之前,我們必須將 username 和 password 變量添加到 Postman 的環境鍵/值對中。

另一種有用的授權類型是* refresh_token*。當我們擁有來自上一次對 token 終端節點的有效刷新令牌時,我們可以使用它。刷新令牌流需要參數 client_idclient_secretgrant_typerefresh_token

我們需要響應access_token來測試其他終端節點。為了加快使用 Postman 的測試速度,我們可以在令牌終端節點請求的 Scripts 部分編寫一個腳本:
在這里插入圖片描述

如果出現錯誤”keycloak Client not allowed for direct access grants“,說明這里需要Direct access grants的開啟

在這里插入圖片描述

5.4. 用戶信息端點

當我們擁有有效的訪問令牌時,我們可以從用戶信息終端節點檢索用戶配置文件數據。

用戶信息端點:{{server}}/realms/{{realm}}/protocol/openid-connect/userinfo

現在,我們將為其創建一個 Postman 請求,并在 Authorization 標頭中傳遞訪問令牌:

這里的access_token就是上一步獲得寫入環境中的Access Token,考慮到需要獲得用戶信息,采用scope 為openid,所以,上一步我紅色標準的參數別忘記了。
不然,該請求的響應頭中有報錯信息,如 error=“insufficient_scope”, error_description=“Missing openid scope”
原因:當前使用的 access_token 丟失了 openid 這個作用范圍。說明這個 access_token 不支持 openid 的方式請求 userinfo。解決這個問題,需要在請求 token 時,顯式的增加 scope=openid 的參數。
在這里插入圖片描述

5.5. Token Introspect 端點

如果資源服務器需要驗證訪問令牌是否有效,或者想要獲取更多關于它的元數據(特別是對于 opaque access tokens[不透明的訪問令牌]),那么令牌內省端點就能滿足需求。在這種情況下,資源服務器將 introspect 過程與安全配置集成在一起。

introspect 端點:{{server}}/realms/{{realm}}/protocol/openid-connect/token/introspect

然后,我們將在 Postman 中創建一個 introspect 請求,并將 client_id、client_secret 和 token 作為表單參數傳遞:

如果 access_token 有效,我們將得到如下響應:
在這里插入圖片描述

但是,如果我們使用無效的訪問令牌,則響應將是:
在這里插入圖片描述

6. 總結

在本文中,使用正在運行的 Keycloak Server,我們為授權、令牌、用戶信息和內省端點創建了 Postman 請求。

7. 關于

關于使用postman的具體操作,請參考《使用 Spring Boot 和 Keycloak 的 OAuth2 快速指南》,該下載區有源碼。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71056.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71056.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71056.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

文生圖開源模型發展史(2014-2025年)

文生圖開源模型的發展歷程是一段充滿技術革新、社區生態繁榮與商業化競爭的多維度演進史。 一、技術萌芽期(2014-2020年) 核心突破 2014年:GAN(生成對抗網絡)誕生,首次實現數據驅動式圖像生成&#xff0…

微服務學習(2):實現SpringAMQP對RabbitMQ的消息收發

目錄 SpringAMQP是什么 為什么采用SpringAMQP SpringAMQP應用 準備springBoot工程 實現消息發送 SpringAMQP是什么 Spring AMQP是Spring框架下用于簡化AMQP(高級消息隊列協議)應用開發的一套工具集,主要針對RabbitMQ等消息中間件的集成…

AI人工智能機器學習之神經網絡

1、概要 本篇學習AI人工智能機器學習之神經網絡,以MLPClassifier和MLPRegressor為例,從代碼層面講述最常用的神經網絡模型MLP。 2、神經網絡 - 簡介 在 Scikit-learn 中,神經網絡是通過 sklearn.neural_network 模塊提供的。最常用的神經網…

WPF高級 | WPF 與數據庫交互:連接、查詢與數據更新

WPF高級 | WPF 與數據庫交互:連接、查詢與數據更新 前言一、數據庫交互基礎概念1.1 數據庫簡介1.2 數據訪問技術 二、WPF 與數據庫連接2.1 連接字符串2.2 建立連接 三、WPF 中的數據查詢3.1 使用ADO.NET進行數據查詢3.2 使用 Entity Framework 進行數據查詢3.3 使用…

【ESP32S3接入訊飛在線語音識別】

【ESP32S3接入訊飛在線語音識別】 1. 前言1.1 步驟概括1.2 硬件介紹1.3 接線2. 操作流程2.1 創建語音識別應用2.2 記錄API秘鑰3. JSON語音接入api3.1 JSON格式3.2 交互流程3.2 ESP32S3 Sense接入代碼1. 核心功能2. 主要模塊3. 工作流程4. 典型應用場景5. 關鍵技術點6. 待完善功…

學生管理前端

文章目錄 首頁student.html查詢功能 首頁 SpringBoot前端html頁面放在static文件夾下:/src/main/resources/static 默認首頁為index.html,我們可以用兩個超鏈接或者兩個button跳轉到對應的頁面。這里只是單純的跳轉頁面,不需要提交表單等其…

(動態規劃 最長遞增的子序列)leetcode 300

這道題我第一眼反應就是暴力,但是暴力的話就是n*n-1*n-2*...n-(n-1) 也就是O(n^n)dfs做絕對超時 貪心也不行,這里是子序列,要考慮在ni的范圍內考慮多種路線取最優,所以用動態規劃 如何用動態規劃呢? 答:…

RabbitMQ系列(六)基本概念之Routing Key

在 RabbitMQ 中,Routing Key(路由鍵) 是用于將消息從交換機(Exchange)路由到指定隊列(Queue)的關鍵參數。其核心作用是通過特定規則匹配綁定關系,確保消息被正確分發。以下是其核心機…

Spark內存并行計算框架

spark核心概念 spark集群架構 spark集群安裝部署 spark-shell的使用 通過IDEA開發spark程序 1. Spark是什么 Apache Spark? is a unified analytics engine for large-scale data processingspark是針對于大規模數據處理的統一分析引擎 spark是在Hadoop基礎上的改進&…

Ubuntu 安裝 Nginx并配置反向代理

Ubuntu版本:Ubuntu 24.04.2 LTS 一、安裝Nginx ?更新系統軟件包? 安裝前需確保系統處于最新狀態,避免依賴沖突 sudo apt update && sudo apt upgrade -y ?安裝Nginx主程序? Ubuntu官方倉庫已包含穩定版Nginx,直接安裝即可 sudo…

Solr中得Core和Collection的作用和關系

Solr中得Core和Collection的作用和關系 一, 總結 在Apache Solr中,Core和Collection 是兩個核心概念,他們分別用于單機模式和分布式模式(SolrCloud)中,用于管理和組織數據。 二,Core 定義&am…

yolov8,yolo11,yolo12 服務器訓練到部署全流程 筆記

正在進行中,隨時更新 一. Anaconda配置 1.安裝anaconda (1)下載.sh文件 Index of /anaconda/archive/ | 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror (2)scp到服務器后,運行安裝包 bash Anaconda3-2020.07-Linux-x86_64.sh (3)安裝anacond…

從零開始開發純血鴻蒙應用之語音朗讀

從零開始開發純血鴻蒙應用 〇、前言一、API 選型1、基本情況2、認識TextToSpeechEngine 二、功能集成實踐1、改造右上角菜單2、實現語音播報功能2.1、語音引擎的獲取和關閉2.2、設置待播報文本2.3、speak 目標文本2.4、設置語音回調 三、總結 〇、前言 中華漢字洋洋灑灑何其多…

【AGI】DeepSeek開源周:The whale is making waves!

DeepSeek開源周:The whale is making waves! 思維火花引言一、DeepSeek模型體系的技術演進1. 通用語言模型:DeepSeek-V3系列2. 推理優化模型:DeepSeek-R1系列3. 多模態模型:Janus系列 二、開源周三大工具庫的技術解析1…

25年前端如何走的更穩

2025年,隨著deepseek引起的AI大模型技術的深度革命,帶來了很多機會和挑戰,前端程序員作為互聯網里一個普通但必不可少的崗位,在當前形勢下,需要主動變革才能走的更穩。本文簡單介紹三個方向,Web3前端、全棧…

DockerでOracle Database 23ai FreeをセットアップしMAX_STRING_SIZEを拡張する手順

DockerでOracle Database 23c FreeをセットアップしMAX_STRING_SIZEを拡張する手順 はじめに環境準備ディレクトリ作成Dockerコンテナ起動 データベース設定変更コンテナ內でSQL*Plus起動PDB操作と文字列サイズ拡張設定検証 管理者ユーザー作成注意事項まとめ はじめに Oracle…

市場加速下跌,但監管「堅冰」正在消融

作者:Techub 熱點速遞 撰文:Yangz,Techub News 與近日氣溫逐步回暖不同,自 2 月 25 日比特幣跌破 9 萬美元以來,加密貨幣市場行情一路下滑。今日 10 時 50 分左右,比特幣更是跌破 8 萬美元大關&#xff0c…

【Android】安卓付款密碼輸入框、支付密碼輸入框

如圖 代碼部分&#xff1a; public class PayPasswordDialog extends AppCompatDialogFragment {private String mPayPass "";private String mTitle, mMoney;private final TextView[] mPayPassTextViewArray new TextView[6];private List<Integer> mPayP…

Java數據結構_一篇文章了解常用排序_8.1

本文所有排序舉例均默認為升序排列。 目錄 1. 常見的排序算法 2. 常見排序算法的實現 2.1 插入排序 2.1.1 基本思想&#xff1a; 2.1.2 直接插入排序 2.1.3 希爾排序&#xff08;縮小增量排序&#xff09; 2.2 選擇排序 2.2.1 基本思想&#xff1a; 2.2.2 直接選擇排…

性能調優篇——索引優化與執行計劃解析

引言 當數據庫表數據突破千萬級時&#xff0c;一個未優化的索引可能讓查詢耗時從毫秒級暴增至分鐘級。某電商平臺曾因商品搜索接口的索引缺失&#xff0c;導致大促期間數據庫CPU飆升至98%&#xff0c;直接引發服務雪崩。本文將深入B樹索引的存儲奧秘&#xff0c;詳解慢查詢日志…