介绍
本文档提供有关整合的Openfire认证的知识,自定义数据库表的用户和组。当你的用户已经在外部系统中有帐户,并且您不希望复制这些帐户到Openfire,这是非常有用的。如果您的用户信息,可通过LDAP目录,而不是自定义数据库表,请参阅的LDAP引导。
自定义数据库中的简单集成,让用户利用其现有的用户名和密码进行身份验证。或者,您可以配置的Openfire从您的自定义数据库中加载用户配置文件和组信息。 Openfire的任何一组被指定为一组共享的,这意味着你可以预先填充用户的名册使用组。
背景
本文档提供了集成的Openfire认证,用户集成,您需要自定义的数据库查询来访问你的数据库以及熟悉你的数据库的表结构和简单的SQL。您的自定义数据库可以是不同的服务器上不同的数据库 - 你需要输入数据库连接信息作为配置的一部分。
配置
配置你的openfire服务器和自定义数据库表集成:
- 停止Openfire.
- 使用你喜欢的工具编辑conf/openfire.xml
- 重启 Openfire.
数据库连接设置
你必须配置连接你数据库的的JDBC驱动的字符串
- jdbcProvider.driver -- JDBC驱动名字
- jdbcProvider.connectionString -- 连接数据库的整个字符串
下面是配置文件的实例:
<jive>
...
<jdbcProvider>
<driver>com.mysql.jdbc.Driver</driver>
<connectionString>jdbc:mysql://localhost/dbname?user=username&password=secret</connectionString>
</jdbcProvider>
...
</jive>
认证集成
最简单的可能是一个自定义的外部数据库集成的身份验证集成。使用下面的设置启用身份验证的集成。
- provider.auth.className -- 配置值 org.jivesoftware.openfire.auth.JDBCAuthProvider.
- jdbcAuthProvider.passwordSQL -- 查询用户密码的SQL
- jdbcAuthProvider.passwordType --密码类型,** "md5" (MD5加密)** "sha1" (SHA-1加密)** "sha256" (SHA-256加密)
如果这个值没有设定,默认是普通字符串
下面是配置文件的一部分示例:
<jive>
...
<provider>
<auth>
<className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className>
</auth>
</provider>
<jdbcAuthProvider>
<passwordSQL>SELECT password FROM user_account WHERE username=?</passwordSQL>
<passwordType>plain</passwordType>
</jdbcAuthProvider>
...
</jive>
您最有可能要更改授权用户名登录到管理控制台。默认情况下,只有用户名“admin”的用户能够登录。然而,你可能有不同的用户在LDAP目录中,你想成为管理员。授权的用户名列表控制通过admin.authorizedUsernames属性。例如,让usersnames,“joe”和“jane”登录到管理控制台:
<jive>
...
<admin>
...
<authorizedUsernames>joe, jane</authorizedUsernames>
</admin>
...
</jive>
用户集成
Openfire可以从您的自定义数据库中加载用户数据。如果启用了用户的整合,还必须启用身份验证集成(见上文)。使用以下设置来整合用户。
- provider.user.className --设置值 org.jivesoftware.openfire.user.JDBCUserProvider.
- jdbcUserProvider.loadUserSQL --sql语句(取出 name和email)
- jdbcUserProvider.userCountSQL --计算数据库用户的总量sql语句
- jdbcUserProvider.allUsersSQL -- 从数据库加载所用的用户sql语句
- jdbcUserProvider.searchSQL -- 通过name或者email查询用户的sql语句
- usernameField -- 用户名,数据库字段的名称,将用于检索数据。
- nameField -- 名字,数据库字段的名称,将用于检索数据。
- emailField --emails 数据库字段的名称,将用于检索数据。
下面是配置文件片段:
<jive>
...
<provider>
<auth>
<className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className>
</auth>
<user>
<className>org.jivesoftware.openfire.user.JDBCUserProvider</className>
</user>
</provider>
<jdbcAuthProvider>
<passwordSQL>SELECT password FROM user_account WHERE username=?</passwordSQL>
<passwordType>plain</passwordType>
</jdbcAuthProvider>
<jdbcUserProvider>
<loadUserSQL>SELECT name,email FROM myUser WHERE username=?</loadUserSQL>
<userCountSQL>SELECT COUNT(*) FROM myUser</userCountSQL>
<allUsersSQL>SELECT username FROM myUser</allUsersSQL>
<searchSQL>SELECT username FROM myUser WHERE</searchSQL>
<usernameField>username</usernameField>
<nameField>name</nameField>
<emailField>email</emailField>
</jdbcUserProvider>
...
</jive>
用户组集成
Openfire can load group data from your custom database. If you enable group integration you must also enable authentication integration; you'll also likely want to enable user integration (see above). Use the following settings to enable group integration.
Openfire的组数据可以从自定义数据库中加载。如果您启用组集成,您还必须启用身份验证的整合,你也可能要启用用户整合(见上文)。使用以下设置来整合。
- provider.group.className -- 设置值为: org.jivesoftware.openfire.group.JDBCGroupProvider.
- jdbcGroupProvider.groupCountSQL --加载存在组的总数的sql
- jdbcGroupProvider.allGroupsSQL -- 查询出所有组的sql
- jdbcGroupProvider.userGroupsSQL -- 针对每个用户加载所有的用户组的sql,
- jdbcGroupProvider.descriptionSQL -- 加载组的描述的sql
- jdbcGroupProvider.loadMembersSQL -- 加载一个组里面所有的用户的sql
- jdbcGroupProvider.loadAdminsSQL --加载一个组里面所有的管理员用户的sql
以后书配置片段,注意:需要所有的配置在一起才能生效
<jive>
...
<provider>
<auth>
<className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className>
</auth>
<user>
<className>org.jivesoftware.openfire.user.JDBCUserProvider</className>
</user>
<group>
<className>org.jivesoftware.openfire.group.JDBCGroupProvider</className>
</group>
</provider>
<jdbcAuthProvider>
<passwordSQL>SELECT password FROM user_account WHERE username=?</passwordSQL>
<passwordType>plain</passwordType>
</jdbcAuthProvider>
<jdbcUserProvider>
<loadUserSQL>SELECT name,email FROM myUser WHERE username=?</loadUserSQL>
<userCountSQL>SELECT COUNT(*) FROM myUser</userCountSQL>
<allUsersSQL>SELECT username FROM myUser</allUsersSQL>
<searchSQL>SELECT username FROM myUser WHERE</searchSQL>
<usernameField>username</usernameField>
<nameField>name</nameField>
<emailField>email</emailField>
</jdbcUserProvider>
<jdbcGroupProvider>
<groupCountSQL>SELECT count(*) FROM myGroups</groupCountSQL>
<allGroupsSQL>SELECT groupName FROM myGroups</allGroupsSQL>
<userGroupsSQL>SELECT groupName FROM myGroupUsers WHERE username=?</userGroupsSQL>
<descriptionSQL>SELECT groupDescription FROM myGroups WHERE groupName=?</descriptionSQL>
<loadMembersSQL>SELECT username FROM myGroupUsers WHERE groupName=? AND isAdmin='N'</loadMembersSQL>
<loadAdminsSQL>SELECT username FROM myGroupUsers WHERE groupName=? AND isAdmin='Y'</loadAdminsSQL>
</jdbcGroupProvider>
...
</jive>