9.3. 使用 OpenID Connect 与红帽单点登录保护应用程序
您可以使用 OpenID Connect (OIDC)将身份验证委派给外部 OpenID 供应商。elytron-oidc-client 子系统在 JBoss EAP 中提供原生 OIDC 客户端,以与外部 OpenID 供应商连接。
要使用 Red Hat Single Sign-On 创建使用 OpenID Connect 保护的应用程序,请按照以下步骤执行:
9.3.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-example/secured/*
9.3.2. 配置 Maven 项目以创建安全应用程序 复制链接链接已复制到粘贴板!
创建一个具有所需依赖项的 Maven 项目,以及用于创建安全应用程序的目录结构。
先决条件
- 您已安装了 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-example
$ cd simple-oidc-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 将以下构建配置设置为使用
mvn widlfy:deploy来部署应用程序: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
现在,您可以创建安全应用程序。
9.3.3. 创建使用 OpenID Connect 的安全应用程序 复制链接链接已复制到粘贴板!
您可以通过更新其部署配置或配置 elytron-oidc-client 子系统来保护应用。以下示例演示了创建一个显示已登录用户的 Principal 的 servlet。对于现有应用,仅需要与更新部署配置或 elytron-oidc-client 子系统相关的步骤。
在本例中,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 供应商。
-
您已启用了
elytron-oidc-client子系统。如需更多信息,请参阅启用 elytron-oidc-client 子系统
流程
创建一个用于存储 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-example/src/main/java/com/example/oidc
$ mkdir -p simple-oidc-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-example/src/main/java/com/example/oidc
$ cd simple-oidc-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 命令:
/subsystem=elytron-oidc-client/secure-deployment=simple-oidc-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-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
在应用程序根目录中,使用以下命令编译应用程序:
mvn package
$ mvn packageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 部署应用。
mvn wildfly:deploy
$ mvn wildfly:deployCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
-
在一个浏览器中,导航到
http://localhost:8080/simple-oidc-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.3.4. 根据用户角色限制对应用程序的访问 复制链接链接已复制到粘贴板!
您可以根据用户角色限制对应用程序的所有或部分的访问。例如,您可以让具有"public"角色的用户能够访问您应用程序的部分不敏感,并授予用户对那些部分的"admin"角色访问权限。
先决条件
- 您已使用 OpenID Connect 保护应用程序。如需更多信息,请参阅创建使用 OpenID Connect 的安全应用程序。
流程
使用以下文本更新部署描述符
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 部署应用。
mvn wildfly:deploy
$ mvn wildfly:deployCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
-
在一个浏览器中,导航到
http://localhost:8080/simple-oidc-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.3.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 具有所需角色的用户可以登录到您的应用程序。