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-only」,然後按一下「儲存」。

按一下「用戶端」,然後再次按一下「建立」。在「用戶端 ID」中輸入 app,然後按一下「儲存」。在「有效重新導向 URI」和「Web 來源」中輸入 *。在生產環境中,輸入應用程式的正確 URL 非常重要,但由於這是一個示範,我們為了簡化起見,只允許所有 URL。您可以在部署應用程式後輕鬆地將這些更新為應用程式的正確 URL。

請保持 Keycloak 管理主控台分頁開啟,因為您稍後會再次需要它。

部署服務

回到 OpenShift 主控台的分頁,然後再次按一下「新增至專案」和「瀏覽目錄」。這次按一下「Node.js」。在「資訊」上按一下「下一步」,然後按一下「組態」下的「進階選項」。

進行以下變更

將 KEYCLOAK_URL 的值取代為 Keycloak 的 URL。您可以回到 Keycloak 管理主控台的分頁找到此值(複製 URL 直到包含 "/auth")。

按一下「建立」,然後按一下「繼續前往專案概觀」。等待建置和部署完成,然後按一下應用程式的連結。您應該會看到「找不到!」將 "/service/public" 新增至 URL,您應該會看到 JSON 中的「message: public」。

您現在已部署並保護了服務。請保持此分頁開啟,因為您稍後也需要它。

部署應用程式

回到 OpenShift 主控台的分頁,然後再次按一下「新增至專案」和「瀏覽目錄」。這次按一下「PHP」。在「資訊」上按一下「下一步」,然後按一下「組態」下的「進階選項」。

進行以下變更

將 KEYCLOAK_URL 的值取代為 Keycloak 的 URL。您可以回到 Keycloak 管理主控台的分頁找到此值(複製 URL 直到包含 "/auth")。此外,將 SERVICE_URL 的值取代為服務的 URL。您可以回到服務的分頁找到此值(複製 URL 直到包含 "/service")。

按一下「建立」,然後按一下「繼續前往專案概觀」。等待建置和部署完成,然後按一下應用程式的連結。您應該已經登入。您現在可以透過按一下「調用公共」來調用未受保護的端點,或按一下「調用管理員」來調用以管理員角色保護的端點。如果您按一下「調用安全」,它將會失敗,因為您登入的管理員使用者沒有使用者角色。若要能夠調用此端點,也請回到 Keycloak 管理主控台。建立一個名為 user 的領域角色。然後前往「使用者」,找到您的管理員使用者,並在「角色對應」下將 user 角色新增至該使用者。

您現在已部署並保護了應用程式,並且了解應用程式如何安全地調用您先前部署的服務。