# 连接自定义数据库概览
只有企业版用户能够使用连接自定义数据库功能,详情请见 https://authing.cn/pricing (opens new window)。如果你想试用,请联系 15559944612 或 sales@authing.cn。
自定义数据库连接(以下会将此成为 Legacy Database)可以满足以下场景的需求:
- 认证:把你的自定义数据库当作认证身份源,这种场景下,可以将 自定义数据库连接 当作和 OIDC IdP, SAML IdP, CAS IdP, Active Directory, Azure AD 同等的身份源(Identity Provider)。
- 迁移用户:这种迁移用户的模式称为惰性迁移(lazy migration),简单来说原理如下:最开始所有的原始用户数据在你的数据库,当用户第一次尝试在 Authing 登录时,Authing 会通过你配置的自定义数据库脚本在你的数据库查找并验证用户,如果成功,会将该用户迁移到 Authing 中;该用户第二次登录时,将使用 Authing 的数据库对其进行验证;当所有的用户都至少登录一次时,意味着迁移上云任务完成。详情请见:使用自定义数据库实现用户惰性迁移。
你可以通过以下方式配置自定义数据库:前往 Authing 控制台 (opens new window) 的 连接身份源 - 自定义数据库 页面开启自定义数据库连接,详情请见配置自定义数据库:
# How it Works
如下图所示,你可以在 Authing 的认证流中自定义数据库从 Legacy Database 中获取用户的身份信息。取决于你所使用的场景,流程原理也会稍有不同。
自定义数据库有两种不同模式,你可以根据自己的业务需求选择合适的模式:
- 惰性迁移用户:这种迁移用户的模式称为惰性迁移(lazy migration),简单来说原理如下:最开始所有的原始用户数据在你的数据库,当用户第一次尝试在 Authing 登录时,Authing 会通过你配置的自定义数据库脚本在你的数据库查找并验证用户,如果成功,会将该用户迁移到 Authing 中;该用户第二次登录时,将使用 Authing 的数据库对其进行验证;当所有的用户都至少登录一次时,意味着迁移上云任务完成。详情请见:使用自定义数据库实现用户惰性迁移 (opens new window)。
- 完全使用自定义数据库:这种模式下用户数据始终保存在你的数据库中,Authing 永远不会保存你的用户数据。为了让系统正常工作,你需要实现完整的用户增删改查脚本。
# 运行环境
目前 Authing 的自定义数据库脚本运行环境为 node 12
环境的完全隔离沙盒实例。
# npm 模块
包含各种数据库连接 Client、axios、bcrypt、lodash 等:
- bcrypt (opens new window): 可用于加密和校验密码,这也是我们推荐的密码加密方式,使用起来也非常简单。示例:
const isPasswordValid = await bcrypt.compare(password, user.password)
if (!isPasswordValid) {
throw new Error('密码错误')
}
- axios (opens new window): Node.JS 最流行的网络请求库。
- lodash (opens new window) v4。
- pg (opens new window): Node PostgresQL Driver。
- mongodb (opens new window): Node Mongodb Driver。
- mysql2 (opens new window): Node MySQL Driver。
- mssql (opens new window): Node Sql Server Driver。
# 全局变量 env
Authing 支持配置用户池级别的全局环境变量,添加方法请见配置环境变量,配置的所有环境变量可以通过全局变量 env.XXX
引用。同时在自定义数据库脚本中,还可以使用以下额外的环境变量:
env.DB_CONNECTION_URI
: 数据库连接字符串,格式一般如postgres://postgres:postgres@localhost:5432/database-name
,你可以用其创建数据库连接实例,如下所示:
const { Client } = require('pg')
const client = new Client({
connectionString: env.DB_CONNECTION_URI,
})
await client.connect()
env.DB_HOST
: 数据库 Host。env.DB_PORT
: 数据库端口。env.DB_USERNAME
: 数据库用户名。env.DB_PASSWORD
: 数据库密码。env.DB_DATABASE
: 数据库名称。
你可以用其创建数据库连接实例,如下所示:
const { Client } = require('pg')
const client = new Client({
host: env.DB_HOST,
port: env.DB_PORT,
user: env.DB_USERNAME,
password: env.DB_PASSWORD,
database: env.DB_DATABASE,
})
await client.connect()
# 添加 IP 白名单
如果你在脚本中访问的服务配置有防火墙,请确保其对以下 IP 地址开放:140.179.19.50, 52.80.250.250 . 你还可以通过以下 API 动态获取 Authing 服务器对外 IP 地址:https://core.authing.cn/api/v2/system/public-ips (opens new window)。
← 连接 Azure AD 配置自定义数据库 →