OpenShift 4 - 利用 RHSSO 实现应用认证和访问授权

news2024/9/22 15:48:46

《OpenShift / RHEL / DevSecOps / Ansible 汇总目录》
说明:本文已经在 OpenShift 4.11 环境中验证

文章目录

  • 安装环境
  • 部署应用并配置登录和授权
    • 部署应用
    • 配置 RHSSO 的用户和组
    • 配置应用身份认证
    • 配置应用访问授权
    • 为应用配置登录和访问授权
  • 参考

本文将部署一个应用,然后用 RHSSO 对应用访问进行身份认证,并对不同的登录用户和应用资源进行访问授权。

安装环境

  1. 执行命令安装 Java 环境。
$ cd ~
$ curl -LO https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
$ tar xzvf openjdk-11.0.2_linux-x64_bin.tar.gz
$ JAVA_PATH=~/jdk-11.0.2/bin
$ PATH=$PATH:$JAVA_PATH/bin
  1. 执行命令安装 Maven 环境。
$ curl -LO https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
$ tar xzvf apache-maven-3.8.6-bin.tar.gz
$ PATH=$PATH:~/apache-maven-3.8.6/bin
  1. 执行命令安装 Make 环境。
$ yum install make
  1. 使用 Operator 安装 RHSSO,然后使用默认配置在名为 sso 的项目中创建一个 Keycloak 实例,名称为 example-keycloak。
  2. 执行以下命令获得 RHSSO 控制台的访问地址和 admin 用户的密码,即可登录 RHSSO 控制台。
$ RH_SSO_HOST=$(oc get route keycloak -o jsonpath='{.spec.host}' -n sso) && echo $RH_SSO_HOST
$ oc get secret credential-example-keycloak -n sso -o go-template --template="{{.data.ADMIN_PASSWORD | base64decode}}"

在这里插入图片描述

部署应用并配置登录和授权

部署应用

  1. 在新建的 sso-app 项目中部署 quarkus-petclinic 应用。
$ oc new-project sso-app
$ git clone -b sso-base https://github.com/aolle/quarkus-petclinic.git && cd quarkus-petclinic
$ ./mvnw install -Dquarkus.kubernetes.deploy=true
  1. 获得访问应用的 Route 地址,然后访问应用,此时应用还无需登录即可访问。
$ oc get route quarkus-petclinic -o jsonpath='{.spec.host}' -n sso-app

在这里插入图片描述

配置 RHSSO 的用户和组

本节将创建属于 vet 角色的 angel 用户以及属于 assistant 角色的 elisa 用户。

  1. 在 RHSSO 的控制台中点击 Master,然后点击 Add realm。
    在这里插入图片描述
  2. 设置 Name 为 demo,然后点击 Create。
    在这里插入图片描述
  3. 点击菜单的 Roles,然后点击 Add Role 按钮。
  4. 在 Add Role 页面中为 Role Name 设为 vet ,然后点击 Create。
  5. 重复步骤再创建名一个为 assistant 的 Role。
  6. 点击菜单的 Users,然后点击 Add user 按钮。
  7. 在 Add user 页面中为 Username 设为 angel,然后点击 Save。
  8. 进入 angel 用户的 Credentials 栏目,设置用户密码后点击 Set Password。
    在这里插入图片描述
  9. 进入 angel 用户的 Role Mappings 栏目,给用户赋予 vet 角色。
    在这里插入图片描述
  10. 重复以上步骤创建名为 elisa 的用户,并赋予 assistant 角色。
  11. 点击菜单的 Groups,然后点击 New 按钮。
  12. 在 Create group 页面中设置 Name 为 staff,然后点击 Save。
  13. 再次点击菜单的 Groups,然后在 User Groups 页面中选中 staff,点击 New 按钮。
    在这里插入图片描述
  14. 在 Create group 页面中设置 Name 为 Personal staff,然后 Save。
  15. 最后应该在 User Groups 页面中看到下图的组关系。
    在这里插入图片描述

配置应用身份认证

本节将实现对应用 http://quarkus-petclinic-sso.apps.cluster-72c7x.72c7x.sandbox2951.opentlc.com 的访问进行身份认证。

  1. 点击菜单的 Clients,然后点击 Create 按钮。
  2. 在 Add Client 页面中设置 Client ID 为 quarkus-petclinic,然后点击 Save。
  3. 在 quarkus-petclinic 的 Setting 页面根据下表进行配置,然后点击 Save。
    | 属性 | 值 |
    |–|–|
    | Access Type | confidential |
    | Authorization Enabled| ON |
    | Valid Redirect URIs| http://quarkus-petclinic-sso.apps.cluster-72c7x.72c7x.sandbox2951.opentlc.com/* |

配置应用访问授权

本节将配置只允许 vet 角色的用户才能访问应用的 VETERINARIANS 栏目,属于 demo realm 的其他用户可以访问应用的其他栏目。
在这里插入图片描述

  1. 点击菜单的 Clients,然后进入 quarkus-petclinic 的 Authorization → Resources。
    在这里插入图片描述
  2. 点击 Name 为 Default Resource 一行后的 Create Permission 按钮。
  3. 在 Add Resource Permission 页面中设置 Name 为 Default Resource Permission,然后点击 Create Policy…​ → Group。
    在这里插入图片描述
  4. 在 Add Group Policy 页面中设置 Name 为 Default Group Policy;然后先选中 Groups 的 staff 再点击 Select,在出现的表中选则 Extend to Children,再将 Logic 设为 Negative,最后点击 Save。
    在这里插入图片描述
  5. 页面会跳转回 Add Resource Permission 页面,点击 Save。
    在这里插入图片描述
  6. 在 Authorization​ → Resources 中点击 Create。
    在这里插入图片描述
  7. 在 Add Resource 页面中将 Name 和 Display name 设为 Vets Resource,将 URI 设为 /vets.html,然后点击 Save。
    在这里插入图片描述
  8. 进入 Authorization → Resources 页面,在 Vets Resource 一行点击 Create Permission 按钮。
    在这里插入图片描述
  9. 在 Add Resource Permission 页面中设置 Name 为 Vets Resource Permission, 在 Apply Policy 的 Create Policy 下拉框中选中Role。
    在这里插入图片描述
  10. 在 Add Role Policy 页面中设置 Name 为 Vet Role Policy,为 Realm Roles 选择出 vet,然后选中 Required,最后点击 Save。
    在这里插入图片描述
  11. 页面会再次跳回 Add Resource Permission 页面,点击 Save 按钮。
    在这里插入图片描述

为应用配置登录和访问授权

  1. 在 quarkus-petclinic 的 Clients 的 Credentials 栏目中记下下图中的 Secret 内容。
    在这里插入图片描述
  2. 执行命令,基于 Secret 内容创建 configmap 和 secret。
$ MY_SSO_CLIENT_SECRET=kFJFDBluHlQIVCQg9S0aF3WAzUwXABto
$ oc create configmap quarkus-petclinic-config --from-literal=SSO_HOST=${RH_SSO_HOST} -n sso-app
$ oc create secret generic quarkus-petclinic-secret --from-literal=SSO_CLIENT_SECRET=${MY_SSO_CLIENT_SECRET} -n sso-app
  1. 执行命令,将一下配置追加到应用的 application.properties 配置文件中。
$ cat >> ~/quarkus-petclinic/src/main/resources/application.properties  << EOF
quarkus.oidc.auth-server-url=https://${RH_SSO_HOST}/auth/realms/demo
quarkus.oidc.client-id=quarkus-petclinic
quarkus.oidc.credentials.secret=${MY_SSO_CLIENT_SECRET}
quarkus.oidc.tls.verification=none
quarkus.oidc.roles.source=accesstoken
 
quarkus.oidc.application-type=web-app
quarkus.oidc.webapp.auth-server-url=${quarkus.oidc.auth-server-url}
quarkus.oidc.webapp.client-id=${quarkus.oidc.client-id}
quarkus.oidc.webapp.credentials.secret=${quarkus.oidc.credentials.secret}
quarkus.oidc.webapp.roles.source=${quarkus.oidc.roles.source}

quarkus.keycloak.policy-enforcer.enable=true
EOF
  1. 执行以下命令,为应用 pom.xml 文件增加扩展,然后重新部署运行应用。
./mvnw quarkus:add-extension -Dextensions='oidc,keycloak-authorization'
./mvnw install -Dquarkus.kubernetes.deploy=true
  1. 分别用 angel 和 elisa 用户登录,确认他们都需要登录才能访问应用。并且 elisa 无法访问应用的 VETERINARIANS 栏目,而 angel 可以访问 VETERINARIANS 栏目。

参考

https://olleb.com/rhsso-workshop/index.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计SSM进出口食品安全信息管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【Maven】jar包冲突原因与最优解决方案

【Maven】jar包冲突原因与最优解决方案 文章目录前言jar包冲突原因依赖传递冲突原因jar包冲突解决方案Maven默认处理策略排除依赖版本锁定maven-shade-plugin插件总结前言 你是否经常遇到这样的报错&#xff1a; java.lang.NoSuchMethodError java.lang.ClassNotFoundExcepti…

Endnote 中批量导出PDF

简介 最近正着手写一篇综述文章&#xff0c;来整体把握下自己研究领域的历史、方法、最新进展与趋势。由于需要对相关文献进行搜集、阅读和分类。庄小编使用 EndNote 来进行管理文献。 在使用较长时间后&#xff0c;整理了几个超级好用的小技巧。比如&#xff1a;自动导入某个…

kubernetes—Service介绍

Service介绍 在kubernetes中&#xff0c;pod是应用程序的载体&#xff0c;我们可以通过pod的ip来访问应用程序&#xff0c;但是pod的ip地址不是固定的&#xff0c;这也就意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题&#xff0c;kubernetes提供了Service资…

错误: 找不到或无法加载主类 com.example.demo.DemoApplication 解决方案

使用场景&#xff1a;使用idea搭建springboot项目使&#xff0c;出现报错情况 错误: 找不到或无法加载主类 com.example.demo7.Demo7Application 解决方案&#xff1a; 方法一&#xff1a;取消勾选“将IDE构建/运行操作委托给Maven” 使用步骤&#xff1a;File > Setting…

Eyeshot 2023 预期计划 Eyeshot 2023 即将见面

Eyeshot 2023 预期--Crack--定制 Eyeshot 是一个基于 Microsoft .NET Framework 的 CAD 控件。它允许开发人员快速将 CAD 功能添加到 WinForms 和 WPF 应用程序。Eyeshot 提供了从头开始构建几何体、使用有限元方法对其进行分析并在其上生成刀具路径的工具。还可以使用 CAD 交…

Python源码剖析3-列表对象PyListObject

1、PyListObject对象 PyListObject 对象可以有效地支持插入,添加,删除等操作,在 Python 的列表中,无一例外地存放的都是 PyObject 的指针。所以实际上,你可以这样看待 Python 中的列表: vector<PyObject*>。 [listobject.h] typedef struct {PyObject_VAR_HEAD/* Vecto…

卡尔曼滤波之最优状态估计和最优状态估计算法

1. 最优状态估计 情景1&#xff1a;假设一个一个比赛中&#xff0c;不同队伍的自动驾驶汽车使用 GPS 定位&#xff0c;在 100 种不同的地形上各行驶 1 公里。每次都尽可能停在终点。然后计算每只队伍的平均最终位置。 第一组输了&#xff1a;因为虽然方差小&#xff0c;但是偏差…

基于java+ssm+vue+mysql的社区流浪猫狗救助网站

项目介绍 随着迅速的发展&#xff0c;宠物饲养也较以前发生很大的变化&#xff0c;社区流浪猫狗救助网站系统以其独有的优势脱颖而出。“社区流浪猫狗救助网站”是以JAVA程序设计语言课为基础的设计出适合社区流浪猫狗救助网站&#xff0c;其开发过程主要包括后台数据库的建立…

Vulnhub:Os-Bytesec靶机渗透

目录 前期准备&#xff1a; 渗透过程 测试SMB PATH环境变量介绍 前期准备&#xff1a; 1.在vulnhub官网下载靶机&#xff1a;Os-Bytesec。 2.靶机用virtualbox打开&#xff0c;网络使用仅主机模式&#xff0c;攻击机kali在vmware上使用桥接模式&#xff0c;并桥接到virtru…

性能优化:Netty连接参数优化

参考资料&#xff1a; 《Netty优化》 相关文章&#xff1a; 《Netty&#xff1a;入门&#xff08;1&#xff09;》 《Netty&#xff1a;入门&#xff08;2&#xff09;》 《Netty&#xff1a;粘包与半包的处理》 《性能优化&#xff1a;TCP连接优化之三次握手》 写在开头…

JavaWeb_第5章_会话技术_Cookie+Session

JavaWeb_第5章_会话技术_CookieSession 文章目录JavaWeb_第5章_会话技术_CookieSession1&#xff0c;会话跟踪技术的概述2&#xff0c;Cookie2.1 Cookie的基本使用2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文3&#xff0c;Session3.1…

vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录

目录 1 dcmtk3.6.7编译 2 vtk9.2.2编译 3 itk5.3编译 4 opencv4.6.0 5 参考链接 编译顺序&#xff0c;qt6.2.4下载----->dcmtk3.6.7----->vtk9.2.2----->itk5.3----->opencv4.6.0 opencv4.6需要使用到vtk9.2.2&#xff0c;需要在最后编译。 opencv遇到…

[附源码]计算机毕业设计校园代取快递系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Nacos2.1.2源码修改支持高斯,postresql

1、下载代码 git clone https://github.com/alibaba/nacos.git -b 2.1.2 或 git clone https://github.com/alibaba/nacos.git 2、maven命令执行下试试能不能打包 mvn -Prelease-nacos -Dmaven.test.skiptrue -Drat.skiptrue clean install -U 或 mvn -Prelease-nacos ‘-Dmav…

盒子模型详解

菜鸟教程解释&#xff1a;所有HTML元素可以看作盒子 1.普通盒子模型&#xff1a; margin&#xff08;外边距&#xff09;&#xff1a;清除边框外的区域&#xff0c;外边距是透明的&#xff0c;不包含在background属性中。 border&#xff08;边框&#xff09;&#xff1a; 围绕…

JUC并发编程与源码分析笔记06-Java内存模型之JMM

计算机硬件存储体系 CPU的运行并不是直接操作内存而是先把内存里边的数据读到缓存&#xff0c;而内存的读和写操作的时候就会造成不一致的问题。 JVM规范中试图定义一种Java内存模型&#xff08;Java Memory Model&#xff0c;简称JMM&#xff09;来屏蔽掉各种硬件和操作系统的…

电平触发的触发器

普通的SR锁存器没有任何抗干扰能力 我们要加控制信号&#xff0c;来抵抗干扰 比如说我们不把信号直接加在门上&#xff0c;我们可以再加一级门电路&#xff0c;让这个输出和输入不在同一个门上&#xff0c;我们希望加入一个控制信号&#xff0c;来控制电路工作的时刻 对电路结…

神经网络——反向传播算法

一、多元分类 之前讨论的神经网络都是以二元分类为目的进行介绍的。 当我们有不止两种分类时&#xff08;也就是y1,2,3….y1,2,3….y1,2,3….&#xff09;&#xff0c;比如以下这种情况&#xff0c;该怎么办&#xff1f;如果我们要训练一个神经网络算法来识别路人、汽车、摩托…

mysql的主从复制与读写分离

目录 一. MySQL 主从复制原理 1.1 MySQL 支持的复制类型 1.2 MySQL主从复制的工作过程 二、主从复制实验部署 2.1、实验环境 2.2、mysql主从服务器时间同步 主服务器&#xff08;192.168.80.11&#xff09; 从服务器&#xff08;192.168.80.12/13&#xff09; 2.3、主…