Keycloak配置


Keycloak切换MySQL数据库

Keycloak默认使用嵌入式关系数据库H2,真实生产环境肯定是不符合要求的,在其官方文档中有这么一段话:

We highly recommend that you replace it with a more production ready external database.
The H2 database is not very viable in high concurrency situations and should not be used in a cluster either.

下面列出Keycloak配置MySQL的步骤。

MySQL配置

下载JDBC驱动,将驱动安装到Keycloak中

  1. 下载JDBC驱动,可从官网或maven仓库直接下载,不再赘述。我下载的版本是 mysql-connector-java-8.0.19.jar

  2. 在keycloak-9.0.0\modules\system\layers\base下新建目录com\mysql\main,将上面下载的jar包放入此目录。
    目录名称可随意修改,不过官方推荐使用包路径作为目录。

    The convention is use the Java package name of the JDBC driver for the name of the directory structure. For PostgreSQL, create the directory org/postgresql/main.

  3. 在jar包同级目录下新建文件module.xml,文件内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <module xmlns="urn:jboss:module:1.3" name="com.mysql">
     <resources>
         <resource-root path="mysql-connector-java-8.0.19.jar"/>
     </resources>
     <dependencies>
         <module name="javax.api"/>
         <module name="javax.transaction.api"/>
     </dependencies>
    </module>

    其中name应为包名,后文配置数据源过程中会用到此name。dependencies包含可能会用到的依赖项。

    在Keycloak配置文件中声明使用下载的MySQL驱动

  4. 编辑standalone.xml,位置在keycloak-9.0.0\standalone\configuration\standalone.xml(若为集群模式编辑standalone-ha.xml),
    寻找drivers标签,默认有一个h2数据库的配置,我们要在同级增加一个mysql的配置,内容如下:

    <driver name="mysql" module="com.mysql">
     <xa-datasource-class>com.mysql.cj.jdbc.MysqlXADataSource</xa-datasource-class>
    </driver>

    module即为之前module.xml中定义的name,此处的name为driver的名称,在接下来的数据源配置中会使用到。
    此处注意,xa-datasource-class的路径可能会随着JDBC版本变化而变化,可从jar包中寻找到正确的路径。

  5. 向上寻找datasources标签,默认此处有两项datasource,我们注释掉名称为KeycloakDS的数据源,并加上mysql的。
    注意不要把ExampleDS也注释掉,启动会报错的。新增内容如下:

    <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
     <connection-url>jdbc:mysql://localhost:3306/keycloak</connection-url>
     <driver>mysql</driver>
     <pool>
         <max-pool-size>20</max-pool-size>
     </pool>
     <security>
         <user-name>root</user-name>
         <password>root</password>
     </security>
    </datasource>

    driver处对应上面定义driver标签中的name。其余项目见文知意,根据具体项目修改即可,此处需要手工建立keycloak库。

  6. 寻找name为connectionsJpa的spi标签,此标签内可定义诸多数据源选项,例如showsql,formatsql等等,可根据需要修改。支持的配置项详见官方文档。

  7. 配置完成,启动对应的bat或shell文件,通过数据库工具可以看到自动新建了93张表。

Keycloak远程访问

keycloak使用JBoss服务器作为容器,而JBoss服务器由于一些安全问题默认是不允许外部访问的(比如远程连接),只允许本机访问,即localhost,
所以要想远程连接keycloak,就要更改一下设置。配置外网访问有下面两种方式。

  1. 启动keycloak的时候在后面加上参数 -b 0.0.0.0
    ./standalone.bat -b 0.0.0.0
  2. 修改keycloak/standalone/configuration/standalone.xml中修改一些配置来启动远程连接,找到interfaces标签,修改为下面的内容
    <interfaces>
         <interface name="management">
             <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
         </interface>
         <interface name="public">
             <inet-address value="${jboss.bind.address:0.0.0.0}"/>
         </interface>
    </interfaces>
    

```


文章作者: Niww
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Niww !
 上一篇
CRLF导致shell脚本报错 CRLF导致shell脚本报错
问题出现开发的时候在Windows环境中打包了一个rpm包,放到CentOS去执行的时候,当运行start.sh文件的时候,一直报错 “No such file or directory”。 问题原因Linux和Windows文本文件的行结
下一篇 
OAuth2协议-授权模式详解 OAuth2协议-授权模式详解
什么是 OAuth 2.0OAuth 2.0 是一个行业的标准授权协议。OAuth 2.0 专注于简化客户端开发人员,同时为 Web 应用程序,桌面应用程序,手机和客厅设备提供特定的授权流程。下面我们对OAuth2的4中授权模式进行详细的介
2020-01-13
  目录