Keycloak对接Snowflake外部OAuth认证时EXTERNAL_OAUTH_MISSING_AUDIENCE求助
问题排查与解决方案
报错原因
- Snowflake默认对外部OAuth令牌强制校验
aud(受众)声明,你当前创建的安全集成未配置EXTERNAL_OAUTH_AUDIENCE_LIST参数,无合法的受众校验规则 - Keycloak返回的访问令牌未携带符合要求的
aud声明,或声明值与Snowflake侧配置不匹配
修复步骤
步骤1:更新Snowflake安全集成配置
执行如下SQL补充受众校验规则:
ALTER SECURITY INTEGRATION external_oauth_keycloak SET EXTERNAL_OAUTH_AUDIENCE_LIST = ('<替换为你为Snowflake客户端设定的受众标识>');
如果是测试场景需要临时跳过受众校验,可执行如下配置(生产环境不推荐):
ALTER SECURITY INTEGRATION external_oauth_keycloak SET EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE';
步骤2:调整Keycloak令牌配置
- 进入Keycloak管理后台,打开对接Snowflake的客户端配置页
- 进入「客户端作用域」配置,添加
audience类型的协议映射器,将映射值设置为你在SnowflakeEXTERNAL_OAUTH_AUDIENCE_LIST中填写的标识 - 重新生成访问令牌后,解码确认令牌Payload中已存在
aud字段且值匹配,再调用Snowflake系统函数完成验证:SELECT SYSTEM$VERIFY_EXTERNAL_OAUTH_TOKEN('<你的访问令牌>');
内容的提问来源于stack exchange,提问作者Katalina Zamora
相关产品推荐
相关产品推荐

