Jina credential validation POST lacks bounded timeout

在 Dify 应用中配置或校验 Jina Reader API Key 时触发。具体涉及 services.auth.jina.jina.JinaAuth.validate_credentials() 方法,该方法在校验 Jina 凭证时通过 _post_request() 发起 HTTP POST

Jina credential validation POST lacks bounded timeout

Jina credential validation POST lacks bounded timeout

快速结论:Jina API Key 凭证校验请求缺少显式超时设置,导致当 Jina 服务端响应缓慢或挂起时,Dify 的凭证校验可能无限阻塞。优先排查 services/auth/jina/jina.py_post_request() 方法是否传递了 timeout 参数。

问题场景

在 Dify 应用中配置或校验 Jina Reader API Key 时触发。具体涉及 services.auth.jina.jina.JinaAuth.validate_credentials() 方法,该方法在校验 Jina 凭证时通过 _post_request() 发起 HTTP POST 请求。

报错原文

E       KeyError: 'timeout'

此报错出现在运行单元测试时:

uv run --project api pytest -o addopts='' api/tests/unit_tests/services/auth/test_jina_auth.py::TestJinaAuth::test_should_validate_valid_credentials_successfully -q

原因分析

JinaAuth._post_request() 方法当前实现为:

def _post_request(self, url, data, headers):
    return _http_client.post(url, headers=headers, json=data)

该调用未传递 timeout 参数,且整个 _http_client 池在初始化时也未设置默认超时。这与 Dify 中其他已加固的认证路径(如 Firecrawl #37521、Nacos PR #37444)采用的显式超时策略不一致。测试用例期望 timeout 键存在但实际缺少,因此抛出 KeyError

环境排查

  • Dify 版本:main 分支
  • 检查文件 api/services/auth/jina/jina.py_post_request() 方法的实现
  • 确认同一目录下 FirecrawlAuthWatercrawlAuth 等其它认证提供者是否存在相同问题

解决步骤

  1. 定位到 api/services/auth/jina/jina.py 文件。
  2. 修改 _post_request() 方法,在调用 _http_client.post() 时添加显式超时参数:
    def _post_request(self, url, data, headers):
        return _http_client.post(url, headers=headers, json=data, timeout=httpx.Timeout(10.0, connect=3.0))

    该超时值与 Dify 最近其他认证路径加固 PR(如 #37444)中使用的常量一致。

  3. (可选)如果多个 services/auth/ 下的认证提供者(FirecrawlAuthWatercrawlAuthJinaAuth)都存在此问题,可考虑在同一 PR 中统一修复。

验证方法

运行单元测试确认修复生效:

uv run --project api pytest -o addopts='' api/tests/unit_tests/services/auth/test_jina_auth.py::TestJinaAuth::test_should_validate_valid_credentials_successfully -q

测试应不再抛出 KeyError: 'timeout' 并顺利通过。同时可模拟 Jina 服务端超时场景,确认凭证校验不会无限阻塞。

参考来源

langgenius/dify #37524

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 9299

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注