为Keycloak添加自定义API

为Keycloak添加自定义API,第1张

添加机制 Service Provider Interfaces (SPI)

我们创建一个不需要认证授权就可以访问的API,然后返回用户列表

添加依赖

整体文件结构如下

DemoRestProviderFactory 和 DemoRestProvider 分别实现接口 org.keycloak.services.resource.RealmResourceProviderFactory 和 org.keycloak.services.resource.RealmResourceProvider

DemoRestProviderFactory 将会定义 REST API 名称,并且在构造器中创建DemoRestProvider实例

DemoRestProviderFactory.java

DemoRestProvider.java

UserDetails.java

使用 SPI 机制添加factory class 到keycloak

添加文件org.keycloak.services.resource.RealmResourceProviderFactory 到 src\main\resources\META-INF

添加文件jboss-deployment-structure.xml到 src\main\resources

jboss-deployment-structure.xml

org.keycloak.services.resource.RealmResourceProviderFactory 的内容为

gaurav.keycloak.DemoRestProviderFactory

运行 maven package,生成的jar包放入keycloak-12.0.2\standalone\deployments 内会自动生成keycloak-rest-api-1.0.jar.deployed 文件

进入keycloak

创建一个realm GW,然后在GW下随便添加几个用户。

参考

参考2

源码

@[TOC]

@[TOC]

1.#Keycloak项目配置

步骤****1****:****Keycloak****入门

请参阅Keycloak入门 文档 以运行和设置keycloak管理员用户。

运行Keycloak后,使用 http:// localhost:8080 / auth 访问keycloak管理控制台

设置keycloak用户名= admin,密码= admin。

第****2****步:创建开发领域

名称:coablt

[图片上传失败...(image-9626fc-1578649185668)]

图1:添加开发领域

客户端ID: account

客户端协议: openid-connect

启用直接访问授权Direct Access Grants Enabled :No

服务帐号已启用 Service Accounts Enabled :No

授权已启用 Authorization Enabled****:****No

[图片上传失败...(image-904bdf-1578649185668)]

步骤****4****:创建客户端角色

在客户端下创建一个角色。在这种情况下,角色admin在雇员服务下创建。

[图片上传失败...(image-1be1e9-1578649185668)]

图3:创建角色

第****6****步:创建一个映射器(在访问令牌中获取****user_name****)

Keycloak访问令牌是 JWT 。它是一个JSON,并且该JSON中的每个字段都称为声明。默认情况下,登录用户名会在访问令牌中名为“ preferred_username”的声明中返回。Spring Security OAuth2资源服务器在名为 “ user_name” 的声明中需要用户名。因此,我们必须创建下面的映射器,以将登录的用户Id映射到名为user_name的新声明。

[图片上传失败...(image-693526-1578649185668)]

图4:创建映射器

步骤****7****:建立使用者

[图片上传失败...(image-b16592-1578649185668)]

图5:创建用户

步骤****8****:将客户端角色映射到用户

为了提供对客户端(微服务)的访问,需要为用户分配/映射相应的角色。

[图片上传失败...(image-c5609f-1578649185668)]

图6:为用户分配角色

使用****PostMan****获取访问令牌(用于测试)

选择 授权 类型为OAuth 2.0,点击“获取新访问令牌”,然后输入以下详细信息。

[图片上传失败...(image-6f4c53-1578649185668)]

邮递员工具屏幕快照:从客户端的密钥斗篷获取访问令牌

· 确保在请求令牌时选择客户端身份验证作为“在正文中发送客户端凭据”。

· 回调URL是在Keycloak中配置的重定向URL。

· 客户端机密可能与您不同,请从客户端配置中的密钥库中复制一个。

· 您也可以使用 https://jwt.io 检查收到的令牌的内容。

步骤****10****:创建一个****Spring Boot****应用程序

[图片上传失败...(image-45efc0-1578649185668)]

依存关系

[图片上传失败...(image-d66a1b-1578649185668)] 步骤****11****:配置****application.yml

常规安全属性

[图片上传失败...(image-992887-1578649185668)] 使用****OAuth2****资源服务器保护****REST****端点的属性

[图片上传失败...(image-aa43c4-1578649185668)]

图7:复制jwt公钥值

注******1******:****可以从领域级别的公钥复制 security.oauth2.resource.jwt.key-value 属性值。这非常重要,此属性是使用****JwtAccessTokenCustomizer******的****属性,我们将在后面看到。

** 注意******2******:****属性值会根据您的配置而有所不同,应注意使用正确的值。

步骤****12****:配置****APi****管理账户

[图片上传失败...(image-b408a1-1578649185667)]

[图片上传失败...(image-71cf2b-1578649185667)]

[图片上传失败...(image-70e51d-1578649185667)]

[图片上传失败...(image-974948-1578649185667)]

步骤****13****:配置后台****APi****管理账户

因为项目初始化了Admin超级管理员,所以需要keycloak配置一个admin的新用户

然后将该用户ID 复制到sys_user表的Oauth2_id字段内

[图片上传失败...(image-715b3b-1578649185667)]


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11422000.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存