前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >通过管理API管理OAuth2 认证授权服务器Keycloak

通过管理API管理OAuth2 认证授权服务器Keycloak

作者头像
码农小胖哥
发布于 2021-09-09 03:10:14
发布于 2021-09-09 03:10:14
3K01
代码可运行
举报
运行总次数:1
代码可运行
在使用Keycloak的时候可能有同学都注意到用户的管理都是通过Keycloak提供的UI来进行的,虽然很方便但是很多时候并不适合在开发中使用。比如注册总不能让终端用户直接去Keycloak的管理控制台(Admin Console)操作吧。所以需要将这些功能API化才行,今天来分享一个通过编程对Keycloak进行操作的方法。

系列博文可通过点击#keycloak查看。

Keycloak Admin Client简介

我们在Keycloak Admin Console中的所有操作都有特定的Restful API,被统称为Keycloak Admin REST API。而 Keycloak Admin Client正是对Keycloak Admin REST APIJava HTTP客户端封装。我们只需要引入下面的依赖就可以集成了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-admin-client</artifactId>
            <version>${version}</version>
        </dependency>

这里简单提一下,其底层用的是JBoss的Rest Web Service客户端Resteasy。JBoss RESTEasy 是一个用来使用Java语言开发 RESTFul Web服务的框架。它是 JAX-RS(Java API for RESTful Web Services) 的一个实现,它的一些亮点:

  • 不需要配置文件,基于注解和Java POJO就可以实现RESTful客户端。
  • 基于JBoss Seam(Java EE的上层强化)编程模型。

这些只作为扩展知识,除非你深入定制,否则不需要学习它,因为 Keycloak Admin Client已经屏蔽了其陡峭的学习成本,接下来让我们开始使用它。

Keycloak Admin Client的使用

Keycloak Admin REST API都需要在请求中放置一个Bearer TokenAuthorization请求头。根据Token中携带的权限信息来获取对应API的访问权限。所以我们在使用Keycloak Admin Client时要特别注意当前你使用的客户端是否有权限访问。接下来的例子就拿注册新用户为例来使用它。

使用Admin账户创建新用户

Master Realm中的Admin管理员拥有管理Keycloak的最高权限,使用它几乎可以在Keycloak中“为所欲为”。

根据我们的配置声明一个Keyclock实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Keycloak adminCli = KeycloakBuilder.builder()
                 // 服务器地址
                .serverUrl("http://localhost:8011/auth/")
                 // master领域
                .realm("master")
                 // 客户端为 admin-cli  
                .clientId("admin-cli")
                 // 需要我们在该客户端下生成密钥
                .clientSecret("f7da6497-98ee-455a-87ba-158793134e56")
                 // 管理员账户
                .username("admin")
                // 管理员密码 
                .password("admin")
                // 授权方式是密码授权 
                .grantType(OAuth2Constants.PASSWORD)
                .build();

这里授权方式为密码授权,要求必须在客户端的Setting选项下打开Direct Access Grants Enabled,这意味着admin-cli客户端能够访问用户的用户名和密码,并以此从Keycloak服务器获取访问令牌,继而能够进行进一步的访问授权操作。

❝那么如何注册新用户呢?

我们可以这样实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 UserRepresentation user = new UserRepresentation();
        user.setUsername("apicreated");
        user.setEnabled(true);

        CredentialRepresentation credentialRepresentation = new CredentialRepresentation();
        credentialRepresentation.setTemporary(false);
        credentialRepresentation.setType(CredentialRepresentation.PASSWORD);
        credentialRepresentation.setValue("123456");

        user.setCredentials(Collections.singletonList(credentialRepresentation));

        RealmResource realm = adminCli.realm("master");

        UsersResource users = realm.users();

        Response response = users.create(user);
        System.out.println("response = " + response.readEntity(String.class));

这里的UserRepresentation就是用户对象,我们定义了一个用户名为apicreated、非临时密码为123456的用户并注册到Master Realm中。

❝我是怎么知道这些API的呢?

官方给了一个Admin API的说明文档,地址为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.keycloak.org/docs-api/15.0/rest-api/index.html

这是使用Keycloak Admin REST API必须看的文档。

使用Realm管理用户创建新用户

Master Realm的管理员账户不屑于干这些“低级”的操作,这种事一般会交给“小弟”去做。为了在felord.cn这个Realm创建用户,你可以给一个Master Realm的用户赋予一个创建felord.cn用户的角色manager-users:

创建一个管理给特定的Realm用户

❝红框中还有很多角色需要你去了解。

利用Master账户给felord.cn创建用户应该这么写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        Keycloak adminCli = KeycloakBuilder.builder()
                .serverUrl("http://localhost:8011/auth/")
                .realm("master")
                .clientId("admin-cli")
                .clientSecret("86ef2225-14d4-49b1-908e-2b5e058030cc")
                .username("felordadmin")
                .password("123456")
                .grantType(OAuth2Constants.PASSWORD)
                .build();
        // 创建用户        
        UserRepresentation user = new UserRepresentation();
        user.setUsername("apicreated2");
        user.setEnabled(true);

        CredentialRepresentation credentialRepresentation = new CredentialRepresentation();
        credentialRepresentation.setTemporary(false);
        credentialRepresentation.setType(CredentialRepresentation.PASSWORD);
        credentialRepresentation.setValue("123456");

        user.setCredentials(Collections.singletonList(credentialRepresentation));

        RealmResource realm = adminCli.realm("felord.cn");

        UsersResource users = realm.users();
 
        Response response = users.create(user);

利用服务账户创建用户

每个Realm都有一个叫realm-management的管理客户端,这个客户端的作用就是用来管理当前的Realm。按照下面的配置你可以开启realm-management的服务账户功能。

开启服务账户功能

这样我们可以直接向Keycloak服务器获取realm-management的访问凭据,因为realm-management有全部的管理功能,所以我们可以以客户端的名义而非管理用户的名义创建新用户了,而且不局限于创建用户。

Keycloak的实例化代码就跟之前不大一样了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Keycloak adminCli = KeycloakBuilder.builder()
        .serverUrl("http://localhost:8011/auth/")
        .realm("felord.cn")
        .clientId("realm-management")
        .clientSecret("38836e47-2c82-4412-a858-9be2a35aa366")
        .grantType(OAuth2Constants.CLIENT_CREDENTIALS)
        .build();

❝这里的授权模式区别于用户行为,它属于客户端行为,因此grant_type改成了客户端模式

总结

创建用户和前面两种方法相同,你可以创建一个用户试试,还有其它的API都可以用这种方式实现。今天介绍了如何调用Keycloak Admin REST API,它可以实现在代码中对Keycloak进行一些管理操作。需要注意的是,这些操作和当前操作主体的角色息息相关。后面会有篇幅来对Keycloak中的管理角色进行一个简单的介绍,希望对Keycloak有兴趣的同学多多关注。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农小胖哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
SAP ERP系统里的那些核心主数据
SAP ERP系统的主数据很多,在后勤方面来讲,最重要却又最容易乱的主数据就是物料主数据,供应商主数据,客户主数据。这是SAP系统最基础最核心的主数据。
SAP虾客
2022/11/13
5900
SAP MM零基础学习-第一篇-模块简介
MM物料管理是SAP R/3系统的一个模块,SAP在标准软件系统市场中处于领先地位。由于使用先进的开发技术,SAP能够为业务的各个方面提供数据处理的解决方案。物料管理模块支持日常发生的业务处理功能和过程。几乎没有一个领域具有这样一个具有广泛应用范围和满足需求的标准软件包,这来自于特殊的工业需求、特殊的产品特点和公司策略。系统还具有与其他商业应用的接口。MM系统(物料管理)的目的是满足下列各种处理,即物料需求计划、物料采购、库存管理、发票确认和物料估价。
matinal
2021/12/06
1.5K0
ERP软件期初数据的导入总结
SAP软件对于期初数据提供了多种数据批导工具,前台可以使用LTMC、Script脚本等,后台可以利用LSMW、COTT、BDC等工具进行处理。前台处理的好处是可以通过标准程序对期初数据进行数据校验,核查数据的完整和准确性,有利于提高数据的质量。
齐天大圣
2021/08/12
1.5K0
matinal:SAP 项目实施全流程,项目实施必须要知道这些
SAP为独立实施的项目提供了面向过程的、清晰的、准确的实施路标。这个路标起到了项目向导的作用,用来确定步骤,明确转折点,并且通常用来设定整个项目的进度,使得可以使用最优的预算和资源,快速高质量的生成一个新的系统。ASAP路标包括下面几个阶段:项目准备,业务蓝图,实现,最后准备以及上线支持。 1、项目准备阶段 项目准备阶段主要是建立项目组织,包括项目团队、角色和职责。这一阶段确定系统实施的目标。还要确定项目的基本构造,包括硬件、网络要素。执行正式安装的规模和指标,并且初始化SAP系统。 1.1 定义项目目标和范围 SAP项目的任务和目标须与公司未来3-5年内的任务和目标一致。指导委员会的重要责任就是决定SAP项目的实施范围。SAP推荐使用“大爆炸”的方式,即公司一次性实施SAP大部分标准的功能和针对公司的特定行业解决方案。 只有通过“大爆炸”的方法才能使公司将SAP系统所获取的信息作为一项资源来使用,如人力、材料、资金,而不是把SAP当作是记录和报表系统。一个综合系统的真正优势只有在公司的所有实施点和办公业务都在SAP平台上运行时才能得到真正的体现。 1.2确定项目组织和资源 建立项目资源计划,项目资源需求包含以下几点: 在合适的阶段分配和支付财务预算; 获取并按照计划来配备相关的系统硬件、软件、网络系统; 选出业务骨干,这些人是他们所在部门的主要成员,并且被任命为功能团队成员,他们被赋予为系统进行全面调试和对最终用户进行培训的任务; 1.3 定义风险控制策略 SAP实施项目是一个标准软件包的实施,主要风险包括: 合适资源的缺乏; 在实施范围和系统功能的问题上缺乏清晰性,完备性和明确性; 需求获取和分析 理解SAP系统所提供的功能 功能上的差距评估和分析 正确配置和定制SAP系统 SAP系统的综合测试 数据风险,特别是各种主数据的准确性 通过制定有效的风险控制策略来控制上述可能的风险。 1.4准备项目计划 建立项目工作计划:项目经理制定项目的主工作计划,包括各阶段的完成时间点以及要提交的主要工作产品。 建立项目组培训计划:针对关键用户和最终用户的系统培训。 1.5项目启动 项目一般由一个发起会议来正式启动,参加这个会议的有管理人员、控制委员会成员、SAP顾问和小组成员。在项目启动大会上介绍项目的目标、项目组的组织成员及职责以及项目的主要工作计划。 1.6项目培训 模块顾问根据培训计划,执行项目组培训。 1.7开发、测试机系统准备 安装开发机、测试机系统,并给所有的项目组成员安装SAP桌面登录系统。 2、蓝图设计阶段 业务蓝图阶段主要处理需求的归档和最终的确定。小组成员和顾问在不同的业务活动领域内进行访谈,并召开项目讨论会,以获得各业务流程的确定需求。当前业务与未来业务的任何差别都必须进行识别,并要寻找和设计合适的解决方案。这个阶段最后输出企业蓝图文档,详细说明设计后的流程,包括公司结构和业务流程的文本和图形说明文件。一旦确定和验证了所有这些信息之后,蓝图就可以作为所有后续阶段的基础。 2.1 AS-IS业务流程调研 制定调研计划,确定调研的时间以及参加的人员,输出文档:调研计划; 设定调研提纲,根据访谈的人员的岗位,设定调研的内容,输出文档:调研问卷; 执行业务调研,根据调研计划,访谈岗位的人员,了解业务现状以及期望未来可达到的管理目标,输出文档:会议纪要; 完成业务调研文档,根据访谈的内容,整理形成公司AS-IS现状业务文档,输出文档:现状业务流程图,现状报告,包括如下内容: 现有系统的Landscape 组织架构 现状业务流程图 收集的现状报表、表单 业务主数据现状等; 2.2 TO-BE业务流程设计 根据现状业务以及未来管理的期望,组织跨模块讨论,编制TO-BE业务流程报告,然后对未来业务流程进行模块小组内讨论,然后提交指导委员会进行评审;输出文档:TO-BE业务蓝图文档。 未来业务流程文档包括如下内容: 确定未来系统的组织架构,比如设定公司代码、成本控制范围、利润中心、成本中心、工厂、仓库、销售组织、采购组织等组织架构。 编制业务流程文档,设定未来业务流程如何在部门间的流转,单据如何控制。 2.3开发需求确认 在讨论和编制业务蓝图的过程中,涉及到需要开发的业务需求,则需要确认各模块的开发需求,输出文档:开发计划。 2.4主数据的收集方案及计划 讨论确认需要收集什么样的主数据,以及主数据的收集内容及计划安排,输出文档,主数据收集模版、主数据收集计划。 2.5业务蓝图的汇报及签署 业务蓝图编制完成后,在模块内部进行
matinal
2023/11/18
6060
SAP FICO 之物料成本历程分析一
在SAP的FICO中,对于入行的同事来说,最难的点不在乎就是CO的管理, CO管理中说白了就是:“ ”料 + 工 + 费” 的管理:
SAP FICO财务与成本
2022/03/19
2.6K0
SAP FI-主数据管理方案
SAP是一个集成的系统,因此主数据是所有模块共享的,许多会计分录也是通过与其他模块的集成,由系统自动产生的。因此会计科目、客户项目、供应商项目已经不再是单纯的财务概念,它与其他模块也是息息相关的。对于FI主数据的维护,为了保证数据的一致性,需要注意:
用户5495712
2019/05/29
2.7K0
SAP FI-主数据管理方案
SAP FICO顾问工具箱
总结了一下这几年做财务顾问中使用到的事务码,归类如下,当成FICO顾问必备的工具箱:
SAP FICO财务与成本
2022/03/18
2.9K0
MM模块是公认的学习SAP ERP系统的入门模块
声明:本文仅代表原作者观点,仅用于SAP软件的应用学习,不代表任何公司。文章涉及SAP相关文字或图片版权归SAP公司所有。
齐天大圣
2023/02/14
1.9K0
MM模块是公认的学习SAP ERP系统的入门模块
写在Logg SAP项目上线之际
根据大环境大行业的惯用做法,公司建立Logg品牌是在意料之中。毫无意外的,Logg也要上到SAP系统中。
SAP梦心
2019/07/01
6460
写在Logg SAP项目上线之际
SAP MIRO校验过程
一、介绍 发票校验是物料管理(MM)系统的一部分。它提供物料管理部分和财务会计, 成本控制和资产管理部分的连接。 物料管理模块的发票校验为以下目的服务: 它完成物料采购的全过程 - 物料采购从采购申请开始,接下来是采购和收货, 并以收到发票而结束。 它允许处理不基于物料采购的发票(例如,服务费, 其它花费,过程费用, 等等)。 它允许处理贷项凭证, 既可以是发票的取消, 也可以是打折扣. 发票校验不是对支付进行处理, 也不是对发票进行分析. 这些需要处理的信息被传递到其它部门. 发票校验的任务包括: 输入接受到的发票和贷项凭证. 检查发票的内容, 价格和计算的准确性. 执行一个发票的帐目记帐 更新SAP系统内的一些数据, 例如, 未结算项目和物料价格. 检查那些因为与采购订单出入太大而被冻结的发票. SAP系统的高度集成允许这些任务能够平稳和高效地进行. 发票校验过程: 每个发票包含不同的信息项。记帐一个发票,你必须将这些信息送入计算机。如果一个发票反映一个现存的事务,一些信息已经保存在系统中。系统建议 这些信息为省缺的数据,你只需要对它进行比较,并且在需要时进行任何可能的修改。 如果发票以一个采购订单为依据,你只需要输入该采购订单号。系统选择 正确的事务并且从采购订单中提取数据,包括供应商,物料,订购的数量, 供货条款,付款条款。当然,如果有变化时,你可以修改这些省缺数据。你可以显示采购订单的历史,例如,有多少货物已经到货,以及有多少已经开出了发票。 如果在采购订单或收货和发票中有变化,系统将在屏幕上发出一个警告。 如果变化在预先设定的允许范围内,系统将允许该发票被记帐,但将自动地 冻结它被支付。发票必须在一个分开的步骤中被批准。如果变化不在允许的范围内,系统将不允许该发票被记帐。 发票被输入时,系统将找到相应的帐户科目。系统将自动生成销售税,现金折扣清算和价格差异,这些记帐的记录被显示出来。如果存在余额,用户要进行修正,因为只有余额为零时发票才能被记帐。 只要发票被记帐,一些数据在系统内被更新,如订购的物料的平均价格和采购 订单的历史。 发票记帐完成了发票校验。发票中需要被支付的数据现在包含在系统中。 会计部门可以读入这些数据并在财务会计部门的协助下做出合适的支付。 发票校验种类: 做为一个规则,一张发票表示一个事务,事务的发货方要求被付款。发票校验根据所涉及发票的种类而不同: 基于采购订单的发票 基于采购订单的发票校验,一个订单的所有项目可以被一起处理,而不管一个项目在若干次部分收货中是否被收到。所有的收货被汇总并被做 为一个项目进行记帐。 基于收货的发票 在基于收货的发票校验方式中,发票不是关联于采购定单,而是关联于分别的交货活动。这就是说,发票的参考凭证不是采购定单 PO,而是交货通知或者收料单凭证。无论你是否使用这个方式安排你与供应商的结算。这个方法可能是有利的,例如,当你知道定单将分许多批交货完成时。 在基于收货的发票校验中,你应该注意以下问题: 一个货物接收活动必须在发票已经输入系统之前。 发票输入的方式可能是参考一个交货通知或一个货物接收凭证。 前提条件 有关的 PO 项目必须有基于收货的发票校验标志。 操作 转向采购定单项目详细屏幕。 选择字段 GR-IV。 保存采购定单。 你可以在任何时候显示货物接受和发票的关系。你将在采购定单项目的历史中找到这些信息。 没有订单的发票 如果没有采购订单做参考,可以直接将事务记入一个物料帐户,一个总帐帐户,或一个资产帐户
matinal
2020/11/27
2.3K0
SAP最佳业务实践:FI–总账(156)-2流程概览
1 用途 总帐会计主要用于提供外部会计核算和科目的综合情况。在与公司所有其他操作范围相集成的软件系统中,记录所有的业务交易(初始过帐和内部会计核算中的结算),从而确保会计核算数据的完整性和准确性。 SAP FI 总帐会计具有以下特点: 自由选择级别:集团公司或公司 自动并同步过帐相应的“总帐会计”科目(对帐科目)中所有的子分类帐项目 同步更新“总帐会计”和成本会计区域 实时评估和报告当前的会计数据、科目显示形式、财务报表(含不同的财务报表版本和附加分析)。 最重要的是“总帐会计”可以完整记录所有业务事
SAP最佳业务实践
2018/03/28
1.4K0
SAP CO-成本管理方案
1、 原材料及外购产品采购入库时,按照移动平均成本计价,外购件主数据中维护计划价格(分别为去年平均价及最新市场价),采购价格与主数据中的计划价格进行对比,材料会计定期运行报表《外购物料价格对比分析表》对差异进行分析,及时根据市场行情调整材料的计划价格(详见应付管理方案);
用户5495712
2019/05/29
3.9K0
SAP CO-成本管理方案
SAP FI-资产管理方案
固定资产折旧范围:所有资产记帐到主导分类帐0L均使用正常折旧范围,对于半导体专业、印制板专业腐蚀性严重的设备,由于特殊性需要减少折旧年限的,定义不同的折旧范围;
用户5495712
2019/05/29
3K0
SAP FI-资产管理方案
SAP CO主数据介绍-初级成本要素
主数据是ERP 的根本所在,ERP 所有的运算、操作都是基于主数据的。在控制模块
用户5495712
2020/12/14
3.3K0
【SAP FICO系列】SAP FICO新总账功能解析大全
新总账的功能和新增功能并不止下面这些,只是其他的功能用的很少,或者根本就没怎么得到应用,所以我也就不进行研究和学习。毕竟,这是一个讲究实用的年代,没有用武之地的东西就没有学习的价值。对于SAP来说,能把项目经常使用的功能掌握熟练,掌握清楚,就足够了,毕竟,企业业务流程的积累和学习才是核心。
matinal
2020/11/10
1.3K0
【SAP FICO系列】SAP FICO新总账功能解析大全
SAP FI-CO总账科目简析
浅谈SAP FICO—总账科目 一、总账科目的概述 总账科目,它起到统驭整个财务的作用。不同的会计科目在总账主数据中创建会应用到不同的“字段”(field),通过这些不同“字段”的组合,就会形成系统能够识别并能够为我们现行会计核算所接受的会计科目。 总帐科目主记录分为两部分: Ø 关于会计科目表的数据。这部分数据用于整个主记录,如总帐科目号码,科目名称,确定科目是资产负债表科目还是损益表科目。此外,用户还可以用它来规定主记录中用于公司代码部分的数据的有关控制信息,如科目组和屏幕格式。 Ø 关于公司代码的数据。这部分数据包含了如何控制业务数据的输入与记帐的参数,如何管理科目的数据,以及其他与公司代码相关的数据,如货币、税码、统驭科目、行项目的显示和未清项的管理等。 其实,这两部分也构成了SAP的总账科目的两个层次,也是SAP区别于其他ERP厂商的一个重要特征。 在 SAP 中,会计科目的定义分为两层:科目表层和公司代码层。比如:一个集团企业可以定义一套会计科目表,但是下面的每个公司代码,从中选择哪些科目,这些科目的各项参数又是可以自己决定的,从而达到集中和灵活兼顾的效果。 SAP的科目类别分为三大类别:资产负债类(BSA)、损益类(PLA)、统驭类(RAA),其中常见的字段状态变式(field status variant)为:一般资产负债科目(GBS)、材料采购GR/IR(MMA)、一般费用科目(EXP)、收入科目(REV)、统驭科目AR/AP(RAA)。
matinal
2020/11/27
1.6K0
SAP FI-CO总账科目简析
SAP S/4HANA Cloud 2302 财务模块亮点
使用 SAP S/4HANA Cloud 2302,新的范围项目 6GD首先发布在德国和美国的国家版本下,提供项目制造的按订单设计 (ETO)的功能。
matinal
2023/10/12
5000
SAP S/4HANA Cloud 2302 财务模块亮点
SAP资产主数据还可以这样操作
资产主数据又称为资产卡片,其必须在资产类别和公司代码下创建,在后台配置中可维护资产主数据的屏幕格式,即设置哪些主数据字段为必输、可选或禁止。
matinal
2019/09/17
2.2K0
SAP资产主数据还可以这样操作
SAP SD基础知识之与FI集成相关的流程与配置
SAP是一个高度集成的系统。业务上,财务是核心,销售是龙头。在SAP系统层面,销售与分销模块的业务与财务模块是高度集成的。
SAP虾客
2021/01/10
9300
SAP SD基础知识之与FI集成相关的流程与配置
相关推荐
SAP ERP系统里的那些核心主数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档