OpenShift 上的 Keycloak

2018 年 5 月 31 日,作者:Stian Thorgersen

在这篇文章中,你将了解如何在 OpenShift 上部署 Keycloak。你还将学习如何部署一个基于 Node.js 的 REST 服务和一个 HTML5 应用程序到 OpenShift,并使用 Keycloak 对它们进行安全保护。

还有一个屏幕录像展示了这个例子,网址是 https://youtu.be/9zUWqbK3BqI

如果你还没有 OpenShift,一个好的开始方式是使用 MiniShift

部署 Keycloak

首先,通过运行 oc 在 OpenShift 中创建一个新项目

oc new-project keycloak

接下来要做的是将 Keycloak 模板导入到 OpenShift 中,通过运行

oc replace --force -f "https://raw.githubusercontent.com/jboss-dockerfiles/keycloak"\
"/master/openshift-examples/keycloak-https.json"

现在打开 OpenShift 控制台并打开 keycloak 项目。

点击 “添加到项目”,然后点击 “浏览目录”。在目录中,你应该能找到 Keycloak。点击它。

在信息页面点击 “下一步”。在配置下,设置一个你可以记住的用户名和密码,分别填写到 “Keycloak 管理员用户名” 和 “Keycloak 管理员密码” 字段中。然后点击 “创建”。点击 “继续到项目概览”。

等待部署完成,然后点击应用程序的链接。你的浏览器会抱怨证书,因为它是一个自签名证书。忽略此警告并继续。点击 “管理控制台”,然后使用你之前输入的用户名和密码登录。保持此选项卡打开,稍后会用到它。

你现在已经将 Keycloak 部署到 OpenShift 上。

在 Keycloak 中配置客户端

我们需要为我们将要保护的服务和应用程序创建客户端。

打开 Keycloak 管理控制台的选项卡。点击 “客户端”,然后点击 “创建”。在 “客户端 ID” 中输入 service,然后点击 “保存”。在 “访问类型” 下选择 “仅 bearer”,然后点击 “保存”。

再次点击 “客户端”,然后点击 “创建”。在 “客户端 ID” 中输入 app,然后点击 “保存”。在 “有效的重定向 URI” 和 “Web 来源” 中输入 *。在生产环境中,非常重要的是输入应用程序的正确 URL,但由于这是一个演示,我们为了简单起见,将允许所有 URL。在应用程序部署后,你可以轻松地将这些更新为应用程序的正确 URL。

保持 Keycloak 管理控制台选项卡打开,稍后会再次用到它。

部署服务

回到 OpenShift 控制台的选项卡,再次点击 “添加到项目”,然后点击 “浏览目录”。这次点击 “Node.js”。在信息页面点击 “下一步”,然后点击 “配置” 下的 “高级选项”。

进行以下更改

将 KEYCLOAK_URL 的值替换为 Keycloak 的 URL。你可以通过返回到 Keycloak 管理控制台的选项卡找到它(复制 URL,包括 “/auth”)。

点击 “创建”,然后点击 “继续到项目概览”。等待构建和部署完成,然后点击应用程序的链接。你应该看到 “Not found!”。在 URL 中添加 “/service/public”,你应该看到 JSON 格式的 “message: public”。

你现在已经部署并保护了服务。保持此选项卡打开,稍后也需要用到它。

部署应用程序

回到 OpenShift 控制台的选项卡,再次点击 “添加到项目”,然后点击 “浏览目录”。这次点击 “PHP”。在信息页面点击 “下一步”,然后点击 “配置” 下的 “高级选项”。

进行以下更改

将 KEYCLOAK_URL 的值替换为 Keycloak 的 URL。你可以通过返回到 Keycloak 管理控制台的选项卡找到它(复制 URL,包括 “/auth”)。 此外,将 SERVICE_URL 的值替换为服务的 URL。你可以通过返回到服务的选项卡找到它(复制 URL,包括 “/service”)。

点击 “创建”,然后点击 “继续到项目概览”。等待构建和部署完成,然后点击应用程序的链接。你应该已经登录了。你现在可以通过点击 “调用 Public” 来调用未受保护的端点,或者点击 “调用 Admin” 来调用受 admin 角色保护的端点。 如果你点击 “调用 Secured”,它将失败,因为你登录的 admin 用户没有 user 角色。为了也能够调用这个端点,请返回到 Keycloak 管理控制台。创建一个名为 user 的 realm 角色。然后转到用户,找到你的 admin 用户,并在角色映射下,将 user 角色添加到该用户。

你现在已经部署并保护了应用程序,并且了解了应用程序如何安全地调用你之前部署的服务。