使用 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 快速指南》,该下载区有源码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/978263.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WEB1~6通杀

##解题思路 这六道题,通杀了,只因为是PHP的特性 来,看web6,过滤最复杂的正则,而且不能解析成大于999的值,但是,php是弱类型的语言,我只要输入任意字符数字,最终值就为0&…

I2C协议简介:串行通信的关键技术

目录 一、总线通信基本概念 二、I2C总线协议介绍 1. 时序图解析 (1)起始信号 (2)应答信号 (3)终止信号 (4)设备地址 (5)I2C传输方法 ​编辑 &#…

第二十四:5.2【搭建 pinia 环境】axios 异步调用数据

第一步安装&#xff1a;npm install pinia 第二步&#xff1a;操作src/main.ts 改变里面的值的信息&#xff1a; <div class"count"><h2>当前求和为&#xff1a;{{ sum }}</h2><select v-model.number"n">  // .number 这里是…

Web漏洞——命令注入漏洞学习

一、什么是命令注入漏洞 想象一下&#xff0c;你家有一个智能管家机器人。这个机器人可以通过你发出的指令来完成各种任务&#xff0c;比如“请打开电视机、播放音乐、开灯等等”。你只需要对它说&#xff1a;“请打开电视”&#xff0c;它就会去执行这个任务。但是&#xff0…

大模型自动提示优化(APO)综述笔记

自大型语言模型&#xff08;LLMs&#xff09;出现以来&#xff0c;提示工程一直是各种自然语言处理&#xff08;NLP&#xff09;任务中激发期望响应的关键步骤。然而&#xff0c;由于模型的快速进步、任务的多样性和相关最佳实践的变化&#xff0c;提示工程对最终用户来说仍然是…

快速排序(详解)c++

快速排序(Quick Sort)&#xff0c;既然敢起这样的名字&#xff0c;说明它是常⻅排序算法中较为优秀的。事实上&#xff0c;在很多情况下&#xff0c;快排确实是效率较⾼的算法&#xff1b;c的排序是以快排为基础&#xff0c;再加上堆排和插入排序做优化实现的&#xff0c;我们这…

【工具变量】公司企业数字领导力(2004-2023年)

数据简介&#xff1a;企业数字化领导力是指在数字经济时代&#xff0c;领导者通过战略性地使用数字资产、引领组织变革&#xff0c;使企业在数字化环境中获得持续成功的能力。对于上市公司而言&#xff0c;这种领导力尤为重要&#xff0c;因为它直接关系到企业的战略方向、市场…

浅谈新能源汽车充电桩建设问题分析及解决方案

摘要&#xff1a; 在全球倡导低碳减排的大背景下&#xff0c;新能源成为热门行业在全球范围内得以开展。汽车尾气排放会在一定程度上加重温室效应&#xff0c;并且化石能源的日渐紧缺也迫切对新能源汽车发展提出新要求。现阶段的新能源汽车以电力汽车为主&#xff0c;与燃油汽…

seacmsv9报错注入

1、seacms的介绍 ​ seacms中文名&#xff1a;海洋影视管理系统。是一个采用了php5mysql架构的影视网站框架&#xff0c;因此&#xff0c;如果该框架有漏洞&#xff0c;那使用了该框架的各个网站都会有相同问题。 2、源码的分析 漏洞的部分源码如下&#xff1a; <?php …

python学习四

python运算符与表达式 表达式: Python中的表达式是一种计算结果的代码片段。它可以包 含变量、运算符、常数和函数调用,用于执行各种数学、逻辑 和功能操作 算术运算符: 比较(关系)运算符: 赋值运算符: 逻辑运算符: 位运算符: 成员运算符: 身份运算符 <

Nginx面试宝典【刷题系列】

文章目录 1、nginx是如何实现高并发的&#xff1f;2、Nginx如何处理HTTP请求&#xff1f;3、使用“反向代理服务器”的优点是什么?4、列举Nginx服务器的最佳用途。5、Nginx服务器上的Master和Worker进程分别是什么?6、什么是C10K问题?7、请陈述stub_status和sub_filter指令的…

数字可调控开关电源设计(论文+源码)

1 设计要求 在本次数字可调控开关电源设计过程中&#xff0c;对关键参数设定如下&#xff1a; &#xff08;1&#xff09;输入电压&#xff1a;DC24-26V,输出电压&#xff1a;12-24&#xff08;可调&#xff09;&#xff1b; &#xff08;2&#xff09;输出电压误差&#xf…

清华大学《AIGC发展研究3.0》

大家好&#xff0c;我是吾鳴。 AIGC已经爆火好长一段时间了&#xff0c;特别是DeepSeek的爆火&#xff0c;直接让很多之前没有体会过推理模型的人可以免费的使用上推理模型&#xff0c;同时DeepSeek产品形态也是全球首创&#xff0c;就是直接把AI的思考过程展示给你看&#xff…

模型和数据集的平台之在Hugging Face上进行模型下载、上传以及创建专属Space

模型下载 步骤&#xff1a; 注册Hugging Face平台 https://huggingface.co/ 新建一个hf_download_josn.py 文件 touch hf_download_josn.py 编写hf_download_josn.py文件 import os from huggingface_hub import hf_hub_download# 指定模型标识符 repo_id "inter…

脚本无法获取响应主体(原因:CORS Missing Allow Credentials)

背景&#xff1a; 前端的端口号8080&#xff0c;后端8000。需在前端向后端传一个参数&#xff0c;让后端访问数据库去检测此参数是否出现过。涉及跨域请求&#xff0c;一直有这个bug是404文件找不到。 在修改过程当中不小心删除了一段代码&#xff0c;出现了这个bug&#xff…

C#实现本地AI聊天功能(Deepseek R1及其他模型)。

前言 1、C#实现本地AI聊天功能 WPFOllamaSharpe实现本地聊天功能,可以选择使用Deepseek 及其他模型。 2、此程序默认你已经安装好了Ollama。 在运行前需要线安装好Ollama,如何安装请自行搜索 Ollama下载地址&#xff1a; https://ollama.org.cn Ollama模型下载地址&#xf…

Buildroot 添加自定义模块-内置文件到文件系统

目录 概述实现步骤1. 创建包目录和文件结构2. 配置 Config.in3. 定义 cp_bin_files.mk4. 添加源文件install.shmy.conf 5. 配置与编译 概述 Buildroot 是一个高度可定制和模块化的嵌入式 Linux 构建系统&#xff0c;适用于从简单到复杂的各种嵌入式项目. buildroot的源码中bui…

音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介

一、引言 RTP封装H.264时&#xff0c;RTP对NALU Header的nal_unit_type附加了扩展含义。 由《音视频入门基础&#xff1a;H.264专题&#xff08;4&#xff09;——NALU Header&#xff1a;forbidden_zero_bit、nal_ref_idc、nal_unit_type简介》可以知道&#xff0c;nal_unit…

智慧园区后勤单位消防安全管理:安全运营和安全巡检

//智慧园区消防管理困境大曝光 智慧园区&#xff0c;听起来高大上&#xff0c;但消防管理却让人头疼不已。各消防子系统各自为政&#xff0c;像一座座孤岛&#xff0c;信息不共享、不协同。 消防设施管理分散&#xff0c;不同区域、企业的设备标准不一样&#xff0c;维护情况…

RAG(检索增强生成)原理、实现与评测方法探讨

RAG是什么&#xff1f; 看一下RAG的英文全称&#xff1a;Retrieval-Augmented Generation&#xff0c;建索、增强、生成&#xff1b;一句话串起来就是通过检索增强模型的生成&#xff0c;是的&#xff0c;这就是RAG。 RAG怎么做&#xff1f; 目前比较通用的套路是这样的&#x…