9.4. 使用 OpenID Connect 开发 JBoss EAP bootable jar 应用程序
您可以使用 OpenID Connect (OIDC)将身份验证委派给外部 OpenID 供应商。elytron-oidc-client galleon 层在 JBoss EAP bootable jar 应用程序中提供原生 OIDC 客户端,以与外部 OpenID 供应商连接。
要使用 Red Hat Single Sign-On 创建使用 OpenID Connect 保护的应用程序,请按照以下步骤执行:
9.4.1. 将 Red Hat Single Sign-On 配置为 OpenID 供应商 复制链接链接已复制到粘贴板!
Red Hat Single Sign-On 是一个身份和访问管理供应商,用于通过单点登录(SSO)保护 Web 应用程序。它支持 OpenID Connect (OAuth 2.0 的扩展)。
先决条件
- 已安装 Red Hat Single Sign-On 服务器。如需更多信息,请参阅 Red Hat Single Sign-On 入门指南 中的安装 Red Hat Single Sign-On 服务器。
- 您已在 Red Hat Single Sign-On 服务器实例中创建用户。如需更多信息,请参阅 Red Hat Single Sign-On 入门指南中的创建用户。https://access.redhat.com/documentation/zh-cn/red_hat_single_sign-on/7.5/html-single/getting_started_guide/#create-user_
流程
在 8080 之外的端口启动 Red Hat Single Sign-On 服务器,因为 JBoss EAP 默认端口为 8080。
语法
RH_SSO_HOME/bin/standalone.sh -Djboss.socket.binding.port-offset=<offset-number>
$ RH_SSO_HOME/bin/standalone.sh -Djboss.socket.binding.port-offset=<offset-number>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/home/servers/rh-sso-7.4/bin/standalone.sh -Djboss.socket.binding.port-offset=100
$ /home/servers/rh-sso-7.4/bin/standalone.sh -Djboss.socket.binding.port-offset=100Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
登录到位于
http://localhost:<port>/auth/ 的管理控制台。例如:http://localhost:8180/auth/。 - 要创建域,请在管理门户中,将鼠标悬停在 Master 上,然后单击 Add realm。
-
输入 realm 的名称。例如:
example_realm。确保 Enabled 为 ON,再单击 Create。 - 点 Users,然后点 Add user 将用户添加到域中。
-
输入用户名。例如,
jane_doe。确保 User Enabled 为 ON,然后单击 Save。 - 点 Credentials 为用户添加密码。
-
设置用户的密码。例如,
janedoep@$$。将 Temporary 切换到 OFF,然后单击 Set Password。在确认提示中,单击 Set password。 - 点 Clients,然后点 Create 来配置客户端连接。
-
输入客户端 ID。例如,
my_jbeap。确保将 Client Protocol 设置为openid-connect,然后单击 Save。 点 Installation,然后选择
Keycloak OIDC JSON作为 Format Option 来查看连接参数。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在将 JBoss EAP 应用程序配置为使用 Red Hat Single Sign-On 作为身份提供程序时,您可以使用参数,如下所示:
"provider-url" : "http://localhost:8180/auth/realms/example_realm", "ssl-required": "external", "client-id": "my_jbeap", "public-client": true, "confidential-port": 0
"provider-url" : "http://localhost:8180/auth/realms/example_realm", "ssl-required": "external", "client-id": "my_jbeap", "public-client": true, "confidential-port": 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Clients,点 my_jbeap 旁边的 Edit 来编辑客户端设置。
在 Valid Redirect URI 中,输入身份验证成功后页面应重定向的 URL。
在本例中,将此值设置为
http://localhost:8080/simple-oidc-layer-example/secured/*
9.4.2. 为可引导 jar OIDC 应用程序配置 Maven 项目 复制链接链接已复制到粘贴板!
创建一个具有所需依赖项的 Maven 项目,以及用于创建使用 OpenID Connect 的可引导 jar 应用程序的目录结构。elytron-oidc-client galleon 层提供了一个原生 OpenID Connect (OIDC)客户端来与 OpenID 供应商连接。
先决条件
- 您已安装了 Maven。如需更多信息,请参阅 下载 Apache Maven。
- 您已为最新版本配置了 Maven 存储库。如需更多信息,请参阅 Maven 和 JBoss EAP microprofile Maven 存储库。
流程
使用
mvn命令建立一个 Maven 项目。该命令创建项目的目录结构以及pom.xml配置文件。语法
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导航到应用程序根目录。
语法
cd <name-of-your-application>
$ cd <name-of-your-application>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
cd simple-oidc-layer-example
$ cd simple-oidc-layer-exampleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新生成的
pom.xml文件,如下所示:设置以下软件仓库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置以下插件存储库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置以下属性:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置以下依赖项:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
pom.xml文件的 <build> 项中设置以下构建配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- JBoss EAP Maven 插件,将应用程序构建为可引导 JAR
- 2
elytron-oidc-client层提供了一个原生 OpenID Connect (OIDC)客户端来与外部 OpenID 供应商连接。- 3
- 在
simple-oidc-layer-example资源路径中注册应用程序。然后,servlet 位于 URLhttp://server-url/application_name/servlet_path,例如:http://localhost:8080/simple-oidc-layer-example/secured。默认情况下,应用程序 WAR 文件在 root-context 路径下注册,如http://server-url/servlet_path,例如:http://localhost:8080/secured。
在
pom.xml文件的 <build> 元素中设置应用程序名称,如 "simple-oidc-layer-example"。<finalName>simple-oidc-layer-example</finalName>
<finalName>simple-oidc-layer-example</finalName>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在应用程序根目录中,输入以下命令:
mvn install
$ mvn installCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您会看到类似如下的输出:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您可以创建一个使用 OpenID Connect 的可引导 jar 应用程序
9.4.3. 创建使用 OpenID Connect 的可引导 jar 应用程序 复制链接链接已复制到粘贴板!
以下示例演示了创建一个显示已登录用户的 Principal 的 servlet。对于现有应用程序,只需要与更新部署配置相关的步骤。
在本例中,Principal 的值来自 OpenID 提供程序的 ID 令牌。默认情况下,Principal 是令牌中的 "sub" 声明的值。您可以在以下之一中指定 ID 令牌中的声明值作为 Principal :
-
elytron-oidc-client子系统属性principal-attribute。 -
oidc.json文件。
该流程中的 < ;application_root > 表示 pom.xml 文件目录。pom.xml 文件包含应用的 Maven 配置。
先决条件
- 您已创建了一个 Maven 项目。如需更多信息,请参阅配置 Maven 项目以创建安全应用程序 。
- 您已将 Red Hat Single Sign-On 配置为 OpenID 供应商。如需更多信息,请参阅配置 Red Hat Single Sign-On 作为 OpenID 供应商。
流程
创建一个用于存储 Java 文件的目录。
语法
mkdir -p <application_root>/src/main/java/com/example/oidc
$ mkdir -p <application_root>/src/main/java/com/example/oidcCopy to Clipboard Copied! Toggle word wrap Toggle overflow Example
mkdir -p simple-oidc-layer-example/src/main/java/com/example/oidc
$ mkdir -p simple-oidc-layer-example/src/main/java/com/example/oidcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 前往新目录。
语法
cd <application_root>/src/main/java/com/example/oidc
$ cd <application_root>/src/main/java/com/example/oidcCopy to Clipboard Copied! Toggle word wrap Toggle overflow Example
cd simple-oidc-layer-example/src/main/java/com/example/oidc
$ cd simple-oidc-layer-example/src/main/java/com/example/oidcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建 servlet "SecuredServlet.java":
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在应用的
WEB-INF目录中的部署描述符web.xml文件中添加访问应用程序的安全规则。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用 OpenID Connect 保护应用,可以更新部署配置或配置
elytron-oidc-client子系统。注意如果您在部署配置和
elytron-oidc-client子系统中配置 OpenID Connect,则elytron-oidc-client子系统secure-deployment属性中的配置优先于应用部署描述符中的配置。更新部署配置:
在
WEB-INF目录中创建oidc.json文件,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下文本更新部署描述符
web.xml文件,以声明此应用程序使用 OIDC:<login-config> <auth-method>OIDC</auth-method> </login-config><login-config> <auth-method>OIDC</auth-method> </login-config>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置
elytron-oidc-client子系统:创建一个目录,将 CLI 脚本存储在应用程序根目录中:
语法
mkdir <application_root>/<cli_script_directory>
$ mkdir <application_root>/<cli_script_directory>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
mkdir simple-oidc-layer-example/scripts/
$ mkdir simple-oidc-layer-example/scripts/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以在 Maven 能够访问应用程序根目录的任意位置创建该目录。
创建包含以下内容的 CLI 脚本,如
configure-oidc.cli:/subsystem=elytron-oidc-client/secure-deployment=simple-oidc-layer-example.war:add(client-id=my_jbeap,provider-url=http://localhost:8180/auth/realms/example_realm,public-client=true,ssl-required=external)
/subsystem=elytron-oidc-client/secure-deployment=simple-oidc-layer-example.war:add(client-id=my_jbeap,provider-url=http://localhost:8180/auth/realms/example_realm,public-client=true,ssl-required=external)Copy to Clipboard Copied! Toggle word wrap Toggle overflow subsystem 命令定义
simple-oidc-layer-example.war资源,作为在elytron-oidc-client子系统中保护的部署。在项目
pom.xml文件中,将以下配置提取添加到现有插件 <configuration>元素中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在应用程序根目录中,使用以下命令编译应用程序:
mvn package
$ mvn packageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令部署可引导 jar 应用程序:
语法
java -jar <application_root>/target/simple-oidc-layer-example-bootable.jar
$ java -jar <application_root>/target/simple-oidc-layer-example-bootable.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow Example
java -jar simple-oidc-layer-example/target/simple-oidc-layer-example-bootable.jar
$ java -jar simple-oidc-layer-example/target/simple-oidc-layer-example-bootable.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这将启动 JBoss EAP 并部署应用程序。
验证
-
在一个浏览器中,导航到
http://localhost:8080/simple-oidc-layer-example/secured。 使用您的凭证登录。例如:
username: jane_doe password: janedoep@$$
username: jane_doe password: janedoep@$$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您将获得以下输出:
Secured Servlet Current Principal '5cb0c4ca-0477-44c3-bdef-04db04d7e39d'
Secured Servlet Current Principal '5cb0c4ca-0477-44c3-bdef-04db04d7e39d'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,您可以使用您在 Red Hat Single Sign-On 中配置的凭证作为 OpenID 供应商登录到应用程序。
9.4.4. 根据可引导 jar OIDC 应用程序中的用户角色限制访问 复制链接链接已复制到粘贴板!
您可以根据用户角色限制对应用程序的所有或部分的访问。例如,您可以让具有"public"角色的用户能够访问您应用程序的部分不敏感,并授予用户对那些部分的"admin"角色访问权限。
先决条件
- 您已使用 OpenID Connect 保护应用程序。如需更多信息,请参阅 创建使用 OpenID Connect 的可引导 jar 应用程序。
流程
使用以下文本更新部署描述符
web.xml文件:语法
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 仅允许具有
example_role角色的用户访问您的应用。
在应用程序根目录中,使用以下命令重新编译应用程序:
mvn package
$ mvn packageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 部署应用。
java -jar simple-oidc-layer-example/target/simple-oidc-layer-example-bootable.jar
$ java -jar simple-oidc-layer-example/target/simple-oidc-layer-example-bootable.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这将启动 JBoss EAP 并部署应用程序。
验证
-
在浏览器中,导航到
\localhost:8080/simple-oidc-layer-example/secured。 使用您的凭证登录。例如:
username: jane_doe password: janedoep@$$
username: jane_doe password: janedoep@$$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您将获得以下输出:
Forbidden
ForbiddenCopy to Clipboard Copied! Toggle word wrap Toggle overflow 由于您尚未将所需的角色分配给用户 "jane_doe," jane_doe 无法登录到您的应用程序。只有具有所需角色的用户才能登录。
要为用户分配所需的角色,请参阅 在 Red Hat Single Sign-On 中创建和分配角色。
9.4.5. 在 Red Hat Single Sign-On 中创建并分配用户角色 复制链接链接已复制到粘贴板!
Red Hat Single Sign-On 是一个身份和访问管理供应商,用于通过单点登录(SSO)保护您的 Web 应用程序。您可以在 Red Hat Single Sign-On 中定义用户并分配角色。
先决条件
- 您已配置了 Red Hat Single Sign-On。如需更多信息,请参阅配置 Red Hat Single Sign-On 作为 OpenID 供应商。
流程
-
登录到位于
http://localhost:<port>/auth/的 admin 控制台。例如:http://localhost:8180/auth/。 - 单击用于与 JBoss EAP 连接的域。例如: example_realm。
-
单击 Clients,然后单击您为 JBoss EAP 配置的
client-name。例如,my_jbeap。 - 单击 Roles,然后单击 Add Role。
- 输入角色名称,如 example_role,然后单击 Save。这是您在 JBoss EAP 中配置用于授权的角色名称。
- 单击 Users,然后查看所有用户。
- 点 ID 来分配您创建的角色。例如,单击 jane_doe 的 ID。
-
点 Role Mappings。在 Client Roles 字段中,选择您为 JBoss EAP 配置的
client-name。例如,my_jbeap。 - 在 Available Roles 中,选择要分配的角色。例如,example_role。单击 Add selected。
验证
- 在浏览器中,导航到应用 URL。
使用您的凭证登录。例如:
username: jane_doe password: janedoep@$$
username: jane_doe password: janedoep@$$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您将获得以下输出:
Secured Servlet Current Principal '5cb0c4ca-0477-44c3-bdef-04db04d7e39d'
Secured Servlet Current Principal '5cb0c4ca-0477-44c3-bdef-04db04d7e39d'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 具有所需角色的用户可以登录到您的应用程序。