OIDC配置下NiFi调用NiFi Registry时的认证问题如何处理?
问题根因
NiFi 服务向 NiFi Registry 发起查询 bucket 的内部请求时,未携带当前登录用户的 OIDC 访问凭证,导致 NiFi Registry 无法识别用户身份,判定为匿名请求拒绝访问。
需补充的配置项
1. NiFi 侧配置(nifi.properties)
新增/修改以下配置项:
nifi.registry.client.authentication.enabled设为true,开启Registry客户端身份传递能力nifi.registry.client.token.auth.enabled设为true,允许向Registry传递Bearer类型的访问令牌- 确认
nifi.security.user.oidc.client.id、nifi.security.user.oidc.client.secret和Keycloak侧注册的NiFi客户端配置完全一致 - 确认NiFi界面中配置的Registry客户端URL是Registry的对外可访问地址,不要使用未走OIDC认证链路的localhost、内网裸地址
2. NiFi Registry 侧配置(nifi-registry.properties)
新增/修改以下配置项:
nifi.registry.security.oidc.enabled保持为true,和原有OIDC配置一致nifi.registry.security.jwt.enabled设为true,开启JWT令牌校验能力nifi.registry.security.jwt.issuer设为Keycloak实例的issuer地址,格式为http(s)://<keycloak域名>/auth/realms/<你的realm名称>,必须和Keycloak返回的令牌中iss字段完全一致nifi.registry.security.jwt.audience设为你在Keycloak中为NiFi、NiFi Registry注册的客户端ID,两个服务用不同客户端时用逗号分隔即可
3. Keycloak 侧补充配置
- 为NiFi、NiFi Registry对应的客户端配置
audience映射,确保颁发的令牌中aud字段包含两个服务的客户端ID,避免令牌被Registry判定为无效 - 确认登录用户所属的角色/权限在NiFi Registry中已完成映射,给用户配置
/buckets读取权限、对应bucket的版本控制操作权限
认证信息传递逻辑
配置生效后,用户在NiFi界面通过OIDC登录时,NiFi会缓存用户的OIDC访问令牌;当用户发起和Registry交互的请求时,NiFi会将该令牌作为Authorization: Bearer <令牌内容>请求头附加到内部调用Registry的请求中,Registry的JwtIdentityProvider会解析该令牌获取用户身份,完成权限校验后返回对应bucket列表。
内容的提问来源于stack exchange,提问作者Benoit Orihuela
相关产品推荐
相关产品推荐

