4.6. 在 Red Hat Single Sign-On 中手动将 EAP 应用程序注册到 SAML 客户端
本例为 EAP 项目准备红帽单点登录域、角色和用户凭据,并为 OpenShift 部署配置 EAP。部署后,可以使用 Red Hat Single Sign-On 用户进行验证和访问 JBoss EAP。
这个示例使用 SAML 客户端,但也可以使用 OpenID-Connect 客户端。如需有关 OpenID-Connect 和 SAML 客户端之间的区别的更多信息,请参阅 Red Hat Single Sign-On Clients 和 Automatic and Manual Red Hat Single Sign-On Client Registration Methods。
先决条件
- 已执行 为 OpenShift Deployment 准备红帽单点登录身份验证 部分中描述的步骤。
4.6.1. 准备红帽单点登录凭证
流程
使用在红帽单点登录部署期间创建的 管理员帐户 登录到加密的红帽单点登录 Web 服务器 https://secure-sso-<project-name > . <hostname> /auth/admin。
创建一个 Realm
- 将光标悬停在域命名空间(默认为 主栏的顶部),然后单击 Add Realm。
- 输入 realm 名称(本例使用 saml-demo),然后点 Create。
复制公钥
在新创建的 saml-demo 域中,单击 Keys 选项卡并复制生成的公钥。本例使用变量 realm-public-key 进行 brevity。之后需要部署启用了 Red Hat Single Sign-On 的 JBoss EAP 镜像。
创建角色
在红帽单点登录中创建角色,其名称对应于示例 EAP 应用的 web.xml 中定义的 JEE 角色。此角色将分配给 Red Hat Single Sign-On 应用用户,以验证对用户应用的访问权限。
- 单击 Configure 边栏中的 Roles,以列出此域的角色。这是一个新域,因此只有默认的 offline_access 角色。
- 点 Add Role。
- 输入角色名称(本例使用 role saml-user-role)并点 Save。
创建用户和分配角色
创建两个用户: - 为 realm-management 角色分配 域管理用户,以便在 Red Hat Single Sign-On 服务器中处理自动的 Red Hat Single Sign-On 客户端注册。- 分配在上一步中创建的应用程序用户 JEE 角色,以验证对用户应用程序的访问权限。
创建 realm 管理用户 :
- 单击 Manage sidebar 中的 Users,以查看域的用户信息。
- 单击 添加用户。
- 输入一个有效的 Username (本示例使用用户 app-mgmt-user)并点 Save。
- 编辑用户配置。单击用户空间中的 Credentials 选项卡,然后输入用户的密码。确认密码后,您可以单击 重置密码 以设置用户密码。弹出窗口提示进行额外的确认。
创建应用程序用户 :
- 单击 Manage sidebar 中的 Users,以查看域的用户信息。
- 单击 添加用户。
- 输入一个有效的 Username 以及 应用程序用户 的额外可选信息,然后点 Save。
- 编辑用户配置。单击用户空间中的 Credentials 选项卡,然后输入用户的密码。确认密码后,您可以单击 重置密码 以设置用户密码。弹出窗口提示进行额外的确认。
- 单击 Role Mappings,以列出 realm 和 client 角色配置。在 Available Roles 中,添加之前创建的角色。
创建并配置 SAML 客户端 :
客户端是请求用户身份验证的红帽单点登录实体。本例配置 SAML 客户端,以处理 EAP 应用的身份验证。本节保存两个文件 keystore.jks 和 keycloak-saml-subsystem.xml,它们会在以后的过程中需要。
创建 SAML 客户端:
- 单击 Configure 边栏中的 Clients,以列出域中的客户端。点 Create。
- 输入一个有效 的客户端 ID。这个示例使用 sso-saml-demo。
- 在 Client Protocol 下拉菜单中选择 saml。
- 输入应用程序的 Root URL。这个示例使用 https://demoapp-eap-app-demo.openshift32.example.com。
- 点击 Save。
配置 SAML 客户端:
在 Settings 选项卡中,为新的 sso-saml-demo 客户端设置 Root URL 和 Valid Redirect URL :
- 对于 Root URL,请输入创建客户端时使用的相同地址。这个示例使用 https://demoapp-eap-app-demo.openshift32.example.com。
- 对于 有效的重定向 URL,在登录或注销时输入要重定向到的用户的地址。这个示例使用相对于 root https://demoapp-eap-app-demo.openshift32.example.com/* 的重定向地址。
导出 SAML 密钥:
- 点 sso-saml-demo 客户端空间中的 SAML Keys 标签页,点 Export。
- 在本例中,将 归档格式 保留为 JKS。这个示例使用 sso-saml-demo 的默认 Key Alias 和 default Realm Certificate Alias of saml-demo。
- 输入密钥密码 , 并输入 "存储密码 "。这个示例使用 password。
- 单击 Download 并保存 密钥存储-saml.jks 文件,以便稍后使用。
- 单击 sso-saml-demo 客户端,以返回到客户端空间以供下一步使用。
下载客户端适配器:
- 点击 Installation。
- 使用 Format Option 下拉菜单选择格式。本例使用 Keycloak SAML Wildfly/JBoss subsystem。
- 点 Download 并保存 keycloak-saml-subsystem.xml 文件。
keystore-saml.jks 将与下一部分中的其他 EAP 密钥存储一起使用,以创建 EAP 应用项目的 OpenShift 机密。将 密钥存储-saml.jks 文件复制到 OpenShift 节点。
keycloak-saml-subsystem.xml 将修改并在应用程序部署中使用。将它复制到应用的 /configuration 文件夹作为 secure-saml-deployments。
4.6.2. 为 OpenShift 部署准备红帽单点登录身份验证
使用包含 cluster:admin 角色的用户登录 OpenShift CLI。
流程
创建一个新项目
$ oc new-project eap-app-demo
将
view
角色添加到default
服务帐户。这可让服务帐户查看eap-app-demo
命名空间中的所有资源,这是管理集群所必需的。$ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
EAP 模板需要 SSL 密钥存储和 JGroups 密钥存储。
本例使用keytool
(Java Development Kit 中包含的软件包)为这些密钥存储生成自签名证书。以下命令将提示输入密码。
为 SSL 密钥存储生成安全密钥:
$ keytool -genkeypair -alias https -storetype JKS -keystore eapkeystore.jks
为 JGroups 密钥存储生成安全密钥:
$ keytool -genseckey -alias jgroups -storetype JCEKS -keystore eapjgroups.jceks
使用 SSL 和 JGroup 密钥存储文件为 OpenShift 机密生成 EAP:
$ oc create secret generic eap-ssl-secret --from-file=eapkeystore.jks $ oc create secret generic eap-jgroup-secret --from-file=eapjgroups.jceks
将 EAP 应用程序 secret 添加到之前创建的 EAP 服务帐户中:
$ oc secrets link default eap-ssl-secret eap-jgroup-secret
4.6.3. 修改 secure-saml-deployments 文件
先决条件
- keycloak-saml-subsystem.xml 从上一节中的 Red Hat Single Sign-On 客户端导出,应该已复制到应用程序的 /configuration 文件夹中,并重命名了 secure-saml-deployments。EAP 会在启动该文件并将其复制到 Red Hat Single Sign-On SAML 适配器配置中的 standalone-openshift.xml 文件时搜索此文件。
流程
- 在文本编辑器中打开 /configuration/secure-saml-deployments 文件。
- 将 secure-deployment name 标签的 YOUR-WAR.war 值替换为应用程序的 .war 文件。本例使用 sso-saml-demo.war。
- 将 logout page 标签的 SPECIFY YOUR LOGOUT PAGE! 值替换为在登出应用程序时将用户重新导向的 url。这个示例使用 /index.jsp。
删除 & lt;PrivateKeyPem& gt; 和 < CertificatePem > 标签和密钥,并将它替换为密钥存储信息:
... <Keys> <Key signing="true"> <KeyStore file= "/etc/eap-secret-volume/keystore-saml.jks" password="password"> <PrivateKey alias="sso-saml-demo" password="password"/> <Certificate alias="sso-saml-demo"/> </KeyStore> </Key> </Keys>
keystore-saml.jks 的挂载路径(本例中为 /etc/eap-secret-volume/keystore-saml.jks)可使用 EAP_HTTPS_KEYSTORE_DIR 参数在应用程序模板中指定。
当从 Red Hat Single Sign-On 客户端导出 SAML 密钥时,配置的 PrivateKey 和 Certificate 的别名和密码。删除第二个 & lt;CertificatePem > 标签和密钥,并将其替换为 realm 证书信息:
... <Keys> <Key signing="true"> <KeyStore file="/etc/eap-secret-volume/keystore-saml.jks" password="password"> <Certificate alias="saml-demo"/> </KeyStore> </Key> </Keys> ...
从 Red Hat Single Sign-On 客户端导出 SAML 密钥时,会配置证书别名和密码。
- 保存并关闭 /configuration/secure-saml-deployments 文件。
4.6.4. 在应用程序 web.xml中配置 SAML 客户端注册
客户端类型还必须由应用程序 web.xml 中的 <auth-method > 键指定。在部署时,该文件由镜像读取。
打开应用程序 web.xml 文件,并确保它包括以下内容:
... <login-config> <auth-method>KEYCLOAK-SAML</auth-method> </login-config> ...
4.6.5. 部署应用程序
您不需要包含镜像的 Red Hat Single Sign-On 配置,因为应用程序本身中已经配置。导航到应用程序登录页面,将您重定向到 Red Hat Single Sign-On 登录。使用之前创建的 应用用户,通过 Red Hat Single Sign-On 登录应用程序。