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


    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
    • 2
    • 3
    • 4
    • 5
    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
    • 2
    • 3
    1. 执行命令安装 Make 环境。
    $ yum install make
    
    • 1
    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
    • 2

    在这里插入图片描述

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

    部署应用

    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
    • 2
    • 3
    1. 获得访问应用的 Route 地址,然后访问应用,此时应用还无需登录即可访问。
    $ oc get route quarkus-petclinic -o jsonpath='{.spec.host}' -n deom-app
    
    • 1

    在这里插入图片描述

    配置 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
    
    • 1

    说明:此时如果跳转到 “为应用配置登录和访问授权”,会发现用户访问应用必须先要登录,但是 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
    • 2
    • 3
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    1. 执行以下命令,为应用 pom.xml 文件增加扩展,然后重新部署运行应用。
    $ ./mvnw quarkus:add-extension -Dextensions='oidc,keycloak-authorization'
    $ ./ocp-deploy.sh
    
    • 1
    • 2
    1. 分别用 angel 和 elisa 用户登录,确认他们都需要登录才能访问应用。并且 elisa 无法访问应用的 VETERINARIANS 栏目,而 angel 可以访问 VETERINARIANS 栏目。

    演示视频

    视频

    参考

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

  • 相关阅读:
    Java高级语言特性——注解与反射
    调试工具(全局工具)(alert、confirm、debugger...)
    Xcode应用安全堡垒:全方位安全性测试指南
    代理配置及多套环境的解决方案
    【强化学习论文合集 | 2021年合集】三. AAMAS-2021 强化学习论文
    时尚零售企业商品计划管理的数字化之旅
    Electron 进程间通信的四种方式
    中国程序员容易发错音的单词「GitHub 热点速览 v.22.23」
    3D模型怎么贴法线贴图?
    代码随想录贪心算法——合并区间
  • 原文地址:https://blog.csdn.net/weixin_43902588/article/details/128166008