跳转至

Vertica OAuth 认证连接 Toad Data Point

原文:Enabling OAuth Authentication in Vertica to Connect to Toad Data Point 测试环境:Vertica 23.3 / Vertica ODBC 23.3 / Toad Data Point 6.0.5 / Keycloak 19.0.2

概述

Vertica 除了其他认证方式外,也支持 OAuth(Open Authorization) 认证。OAuth 是一种开放标准协议,无需共享用户凭据即可向应用程序授予访问权限。

本文将介绍通过 Keycloak(开源 IAM)作为 OAuth 服务器,生成 JWT Token,使 Toad Data Point 通过 Vertica ODBC 驱动连接 Vertica。

组件说明

组件 作用
Keycloak 开源 IAM 解决方案,充当 OAuth 服务器。负责生成 Access Token、验证用户身份、执行访问策略
Toad Data Point 数据分析和查询工具,使用 Vertica ODBC 驱动连接 Vertica

步骤一:Keycloak 生成 OAuth Token

  1. 登录 Keycloak
  2. 创建 Realm
  3. 创建用户,并完成以下操作:
  4. 填写必填字段
  5. Enabled 开关设为启用
  6. 记录密码
  7. 将用户映射到 pseudosuperuser 角色
  8. Realm Settings > Keys > Public Key 复制 RS256 公钥
  9. 打开 Realm Settings > General > OpenID Endpoint Configuration 链接,记录端点地址

步骤二:Vertica 端启用 OAuth 认证

在 Vertica 数据库中依次执行以下 SQL(本例使用 JWT 作为验证类型):

-- 清理旧认证(如存在)
DROP AUTHENTICATION IF EXISTS oauthjwt CASCADE;

-- 创建 OAuth 认证,允许所有主机
CREATE AUTHENTICATION oauthjwt METHOD 'oauth' HOST '0.0.0.0/0';

-- 设为 JWT 验证类型
ALTER AUTHENTICATION oauthjwt SET validate_type = 'JWT';

-- 设置 JWT 签发者
ALTER AUTHENTICATION oauthjwt SET jwt_issuer = 'http://<keycloak_IP>:8080/realms/<Realm_Name>';

-- 设置 RSA 公钥(Keycloak 中复制的 RS256 公钥)
ALTER AUTHENTICATION oauthjwt SET jwt_rsa_public_key = '-----BEGIN PUBLIC KEY----- <PUBLIC_KEY> -----END PUBLIC KEY-----';

-- 设置用户名映射字段
ALTER AUTHENTICATION oauthjwt SET jwt_user_mapping = 'preferred_username';

-- 启用 JIT(Just-In-Time)用户创建
ALTER AUTHENTICATION oauthjwt SET oauth2_jit_enabled = 'yes';
ALTER DATABASE default SET OAuth2JITClient = '<ClientName>';
ALTER AUTHENTICATION oauthjwt SET client_id = '<ClientName>';

-- 设置 OAuth discovery URL
ALTER AUTHENTICATION oauthjwt SET discovery_url = 'http://<Keycloak_Server>:8080/realms/<Realm_Name>/.well-known/openid-configuration';

-- 创建与 Keycloak 同名的数据库用户
CREATE USER <Username>;

-- 授权
GRANT AUTHENTICATION oauthjwt TO <username>;

步骤三:创建 Vertica ODBC DSN

基本配置

  1. 安装 Vertica ODBC 驱动
  2. 打开 64-bit ODBC DSN 管理器
  3. 添加 Vertica DSN,填写以下信息:
  4. DSN Name
  5. Database
  6. Server
  7. Port
  8. User Name
  9. 保存 DSN

添加 OAuth 注册表项

  1. 打开 regedit,导航到 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\<DSN_Name>
  2. 右侧空白区域右键 → New > String Value

Howto Oauth 0

  1. 名称设为 OAuthJsonConfig,值为以下 JSON:
{
  "oauthtokenurl": "http://<Keycloak_IP>:8080/realms/<Realm_Name>/protocol/openid-connect/token",
  "oauthauthurl": "http://<Keycloak_IP>:8080/realms/<Realm_Name>/protocol/openid-connect/auth",
  "oauthclientid": "<Client_Name>",
  "oauthclientsecret": "<Client_Credentials>",
  "oauthscope": "offline_access openid",
  "oauthvalidatehostname": "false"
}

Client Credentials 在 Keycloak > Clients > Credentials 选项卡中获取。

注意:再次打开并保存 Vertica DSN 时,注册表项会被清除,需要重新添加。

步骤四:Toad Data Point 连接

  1. 打开 Toad Data Point
  2. 点击 ConnectNew Connection
  3. Group 下拉选择 Vertica
  4. 选择刚创建的 DSN
  5. 点击 Connect
  6. Keycloak 登录页面弹出,输入在 Keycloak 中创建的用户名和密码
  7. 看到成功通知后,切回 Toad Data Point,即完成 OAuth 认证连接

扩展阅读