開源認證和訪問控制的利器keycloak使用簡介 簡介 安裝keycloak 創建admin用戶 創建realm和普通用戶 使用keycloak來保護你的應用程序 總結

簡介

keycloak是一個開源的進行身份認證和訪問控制的軟件。是由Red Hat基金會開發的,我們可以使用keycloak方便的嚮應用程序和安全服務添加身份認證,非常的方便。

keycloak還支持一些高級的特性,比如身份代理,社交登錄等等。

本文將會帶領大家進入keycloak的神祕世界。

安裝keycloak

keycloak有很多種安裝模式,這裏我們先介紹最簡單的standalone模式。

要安裝keycloak,我們需要下載keycloak的zip包。在我寫這篇文章的時候,keycloak的最新版本是11.0.2。

下載鏈接如下: https://downloads.jboss.org/keycloak/11.0.2/keycloak-11.0.2.zip

下載完畢,解壓,

cd bin
./standalone.sh

我們可以簡單的挑選一些啓動日誌來分析一下:

=========================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: /Users/flydean/data/git/security/keycloak-11.0.2

  JAVA: /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/bin/java

  JAVA_OPTS:  -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true

=========================================================================

22:08:04,231 INFO  [org.jboss.modules] (main) JBoss Modules version 1.10.1.Final
22:08:08,706 INFO  [org.jboss.msc] (main) JBoss MSC version 1.4.11.Final
22:08:08,721 INFO  [org.jboss.threads] (main) JBoss Threads version 2.3.3.Final
22:08:08,921 INFO  [org.jboss.as] (MSC service thread 1-2) WFLYSRV0049: Keycloak 11.0.2 (WildFly Core 12.0.3.Final) starting

可以看到keycloak底層實際上使用的是WildFly服務器,WildFly服務器的前身就是JBoss,也是由red hat主導的。所以keycloak使用WildFly還是很合理的。

當我們看到下面的日誌的時候,就意味着keycloak啓動好了。

22:08:26,436 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
22:08:26,437 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990

接下來,我們需要爲keycloak創建admin用戶。

創建admin用戶

啓動好keycloak之後,我們就可以登錄到web頁面 http://localhost:8080/auth 創建admin用戶了。

這是創建用戶的界面,我們輸入用戶名和密碼,點擊create,就可以創建admin用戶了。

創建完admin用戶,點擊登錄到admin console,就會跳轉到admin console的登錄頁面 http://localhost:8080/auth/admin/

輸入用戶名密碼,點擊登錄。

然後就進入到了管理界面:

可以看到管理界面提供的功能還是非常豐富的。

我們可以對realm,clients,roles,identity providers,user federation,authentication等進行配置和定義。

還可以對groups,users,sessions,events等進行管理,非常強大和方便。

創建realm和普通用戶

realm翻譯成中文就是域,我們可以將它看做是一個隔離的空間,在realm中我們可以創建users和applications。

keycloak中有兩種realm空間,一種是Master realm,一種是Other realms。

master realm是指我們使用admin用戶登錄進來的realm空間,這個realm只是用來創建其他realm的。

other realms是由master realm來創建的,admin可以創建users和applications,而這些applications是由users所有的。

點擊add realm按鈕,我們進入add realm界面,輸入realm的名字,就可以創建realm了。

上面的例子中,我們創建了一個叫做WildFly的realm。

接下來,我們爲WildFly創建新的user:

輸入用戶名,點擊save。

選擇新創建user的credentials頁面,輸入要創建的密碼,點擊set password,那麼新創建用戶的密碼則創建完畢。

接下來,我們使用新創建的用戶flydean來登錄realm WildFly,登錄url如下:

http://localhost:8080/auth/realms/WildFly/account

輸入用戶名和密碼,進入用戶管理頁面:

我們將用戶所需要的資料填充完畢,以供後面使用。

使用keycloak來保護你的應用程序

因爲keycloak底層使用的是WildFly,爲了簡單起見,這裏我們也使用keycloak來保護一個WildFly程序。

我從WildFly的官網下載最新版本的WildFly,然後解壓備用。

因爲keycloak和WildFly都是在同一臺機子上面啓用。所以默認情況下端口都是一樣的8080。

接下來,我們需要修改一下keycloak的端口,以避免端口衝突。

cd bin
./standalone.sh -Djboss.socket.binding.port-offset=100

我們重啓一下keycloak,在啓動命令中添加了jboss.socket.binding.port-offset,這個是相對於標準端口的偏移量。

比如之前我們的端口是8080,那麼現在端口就是8180。

看一下,現在的管理頁面鏈接是不是變到了 http://localhost:8180/auth/admin/

安裝WildFly client adapter

爲了無縫集成WildFly,keycloak提供了多種adapter供我們使用:

可以看到除了WildFly,keycloak還可以支持Jetty和Tomcat,我們可以在後面的文章中來講解如何集成keycloak到Jetty和Tomcat。

同時,client Adapters還有兩種協議格式,openid connect和SAML 2.0,我們也會在後面的文章中具體介紹一下這兩種協議,敬請期待。

好了,先下載WildFly adapter,將adapter放到WildFly的跟目錄下面:

server/wildfly-20.0.1.Final : ls
LICENSE.txt                              bin                                      domain                                   modules
README.txt                               copyright.txt                            jboss-modules.jar                        standalone
appclient                                docs                                     keycloak-wildfly-adapter-dist-11.0.2.zip welcome-content

解壓adapter,解壓之後,進入wildfly-20.0.1.Final/bin目錄,運行:

./jboss-cli.sh --file=adapter-elytron-install-offline.cli

如果你得到下面的輸出結果:

{"outcome" => "success"}
{"outcome" => "success"}
{"outcome" => "success"}
{"outcome" => "success"}

那就說明adapter安裝成功了,這個腳本會修改…​/standalone/configuration/standalone.xml。

然後我們可以啓動WildFly了:

./standalone.sh

註冊WildFly應用程序

回到我們的admin console: http://localhost:8180/auth/admin/

選擇我們之前創建的realm:WildFly,在clients選項中,我們創建新的client:

創建完成之後,我們進入到installation tab:

選擇keycloak OIDC JSON,點擊Download,下載keycloak.json文件。

然後選擇Keycloak OIDC JBoss Subsystem XML,點擊下載,下載keycloak-oidc-subsystem.xml文件。

接下來,我們需要修改WildFly配置信息。

進入WildFly的standalone/configuration目錄,修改standalone.xml文件如下:

        <subsystem xmlns="urn:jboss:domain:keycloak:1.1">
                <secure-deployment name="vanilla.war">
                <realm>WildFly</realm>
    <auth-server-url>http://localhost:8180/auth/</auth-server-url>
    <public-client>true</public-client>
    <ssl-required>EXTERNAL</ssl-required>
    <resource>vanilla</resource>
</secure-deployment>
        </subsystem>

這個subsystem的內容實際上就是我們剛剛保存的keycloak-oidc-subsystem.xml裏面的內容。

這裏我們需要知道secure-deployment的war名字,也就是我們接下來將要部署的應用程序的名字。

重啓WildFly。

安裝vanilla應用程序

爲了簡單起見,我們直接從 https://github.com/keycloak/keycloak-quickstarts 中下載示例代碼項目 app-profile-jee-vanilla。

git clone https://github.com/keycloak/keycloak-quickstarts
cd keycloak-quickstarts/app-profile-jee-vanilla/config

將剛剛下載的keycloak.json拷貝到當前目錄。

然後切換到keycloak-quickstarts父目錄,執行:

mvn clean wildfly:deploy

這個命令將會打包成爲適合WildFly執行的war包,也就是我們要的vanilla.war。

將打包好的vanilla.war拷貝到WildFly目錄下的standalone/deployments。

WildFly會自動重新部署該應用程序。

這時候我們訪問下應用程序 http://localhost:8080/vanilla

可以看到登錄界面。點擊登錄。

先看下登錄鏈接,自動跳轉到了 http://localhost:8180/auth/realms/WildFly/protocol/openid-connect/auth?response_type=code&client_id=vanilla&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fvanilla%2Fprofile.jsp&state=8521b8ab-83f7-4fec-9ced-8c90a3d42839&login=true&scope=openid

這也就是keycloak登錄域WildFly的登錄界面,不過後面帶上了redirect_uri參數,說明登錄成功後,會跳轉回vanilla程序的界面。

我們使用之前創建的用戶名和密碼登錄看看。

登錄成功。

總結

上面的例子我們演示瞭如何配置keycloak,並且創建一個realm供第三方程序使用。還舉了一個無侵入的例子來和keycloak對接。

當然,有朋友會問了,vanilla程序是怎麼和keycloak對接的呢?如果我們要寫一個自己的程序,應該怎麼做呢?

別急,細節我會在後面的文章進行分享,敬請期待。

本文作者:flydean程序那些事

本文鏈接:http://www.flydean.com/keycloak-startup/

本文來源:flydean的博客

歡迎關注我的公衆號:「程序那些事」最通俗的解讀,最深刻的乾貨,最簡潔的教程,衆多你不知道的小技巧等你來發現!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章