OpenShift 4 - 利用 RHSSO 实现应用认证和访问授权(附视频)

89 篇文章 3 订阅
76 篇文章 6 订阅

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


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

安装环境

  1. 执行命令安装 OpenJDK 11 环境。
$ 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/
$ 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. 在 OpenShift 控制台的 OperatorHub 中将 Red Hat Single Sign-On Operator 使用默认配置安装到 sso 项目中,然后使用默认配置在名为 sso 的项目中创建一个 Keycloak 实例,名称为 my-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-my-keycloak -n sso -o go-template --template="{{.data.ADMIN_PASSWORD | base64decode}}"

在这里插入图片描述

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

部署应用

  1. 在新建的 demo-app 项目中部署 quarkus-petclinic 应用。
$ oc new-project demo-app
$ git clone -b sso-base https://github.com/liuxiaoyu-git/quarkus-petclinic.git && cd quarkus-petclinic
$ ./ocp-deploy.sh
  1. 获得访问应用的 Route 地址,然后访问应用,此时应用还无需登录即可访问。
$ oc get route quarkus-petclinic -o jsonpath='{.spec.host}' -n deom-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 Typeconfidential
Authorization EnabledON
Valid Redirect URIshttp://quarkus-petclinic-sso.apps.cluster-72c7x.72c7x.sandbox2951.opentlc.com/*

其中 Valid Redirect URIs 地址是应用的 route。

$ oc get route quarkus-petclinic -o jsonpath='{.spec.host}' -n demo-app

说明:此时如果跳转到 “为应用配置登录和访问授权”,会发现用户访问应用必须先要登录,但是 2 个登录用户都可以访问全部的应用栏目。下面就根据用户进行访问授权,让不同的登录用户能访问不同的应用栏目。

配置应用访问授权

本节将配置只允许 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 demo-app
$ oc create secret generic quarkus-petclinic-secret --from-literal=SSO_CLIENT_SECRET=${MY_SSO_CLIENT_SECRET} -n demo-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'
$ ./ocp-deploy.sh
  1. 分别用 angel 和 elisa 用户登录,确认他们都需要登录才能访问应用。并且 elisa 无法访问应用的 VETERINARIANS 栏目,而 angel 可以访问 VETERINARIANS 栏目。

演示视频

视频

参考

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值