BUG: WIF token exchange fails to deserialize: expires_at not marked as ignorable in TokenExchangeResponse
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 2/5
- 预计耗时
- 1-3 小时
- 新手友好度
- 72/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
调研方向
该错误在 com.openai.auth.TokenExchangeResponse 中抛出,它在 WorkloadIdentityAuth.processTokenExchangeResponse(WorkloadIdentityAuth.kt)中反序列化令牌交换的响应。请阅读 TokenExchangeResponse.kt,并检查 auth 包中其他响应类如何处理未知字段。当包含 expires_at 的响应能被正确解析时即完成,最好附带一个输入该 JSON 正文的测试。
由索引模型根据 Issue 内容生成。
描述
Summary
Workload identity federation fails during the token exchange response parsing. OpenAI's /oauth/token endpoint returns an expires_at field that TokenExchangeResponse does not, and the deserializer is not configured to ignore unknown properties.
Version
com.openai:openai-java:4.82.0
Error
Error Text
Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "expires_at" (class com.openai.auth.TokenExchangeResponse), not marked as ignorable (4 known properties: "token_type", "issued_token_type", "access_token", "expires_in")
at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 6, column: 27] (through reference chain: com.openai.auth.TokenExchangeResponse["expires_at"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:1200)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:2434)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1826)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1804)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:271)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:472)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1502)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:340)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:5052)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3954)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3937)
at com.openai.auth.WorkloadIdentityAuth.processTokenExchangeResponse(WorkloadIdentityAuth.kt:300)
at com.openai.auth.WorkloadIdentityAuth.performRefresh(WorkloadIdentityAuth.kt:245)
at com.openai.auth.WorkloadIdentityAuth.getToken(WorkloadIdentityAuth.kt:121)
at com.openai.core.http.WorkloadIdentityHttpClient.execute(WorkloadIdentityHttpClient.kt:19)
at com.openai.core.http.LoggingHttpClient.execute(LoggingHttpClient.kt:57)
at com.openai.core.http.RetryingHttpClient.executeInternal(RetryingHttpClient.kt:95)
at com.openai.core.http.RetryingHttpClient.execute(RetryingHttpClient.kt:34)
at com.openai.services.blocking.chat.ChatCompletionServiceImpl$WithRawResponseImpl.create(ChatCompletionServiceImpl.kt:140)
at com.openai.services.blocking.chat.ChatCompletionServiceImpl.create(ChatCompletionServiceImpl.kt:63)
at com.openai.services.blocking.chat.ChatCompletionService.create(ChatCompletionService.kt:64)
at openai_auth.main(openai_auth.java:102)
Cause
TokenExchangeResponse includes only four fields (access_token, issued_token_type, token_type, expires_in) and does not set @JsonIgnoreProperties(ignoreUnknown = true).
Impact
Any WIF flow using a custom SubjectTokenProvider (e.g. AWS STS GetWebIdentityToken) fails at response parsing.
- 主要语言
- Kotlin
- 星标
- 1.5k
- 派生
- 268
- 平均合并
- 14 小时 59 分钟
- 30 天内合并 PR
- 165
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
openai/openai-java 的其他 Issue
-
HttpRequest.url() logs spaces in path segments as literal plus signs可能已有人在做 @sylvesterkaczmarek 于 59 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 78/100
openai/openai-java#886 · 2 条评论 ·
维护者通常 1 天内回复
-
Make diarized transcription duration and task optional可能已有人在做 @wskr00 于 90 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 68/100
openai/openai-java#802 · 2 条评论 · 3 个 reaction ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 30/100
openai/openai-java#1175 ·
维护者通常 1 天内回复
-
难度 3/5 半天 新手友好度 42/100
openai/openai-java#1160 ·
维护者通常 1 天内回复
-
难度 5/5 一周以上 新手友好度 35/100
openai/openai-java#956 ·
维护者通常 1 天内回复
查看 openai/openai-java 的全部 Issue
相似的 Issue
-
bug follow-up
难度 2/5 1-3 小时 新手友好度 68/100
维护者通常 1 天内回复
-
binding:web core docs p3
难度 2/5 1-3 小时 新手友好度 85/100
RunanywhereAI/runanywhere-sdks#1123 ·
维护者通常 1 天内回复
-
StepExamBenchmarkTest runs a loop and prints a timing but asserts nothing可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭jules
难度 1/5 1 小时以内 新手友好度 82/100
open-learning-exchange/myplanet#18199 · 1 条评论 ·
维护者通常 4 天内回复
-
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
auth0/Auth0.Android#1095 · 1 条评论 ·
维护者通常 1 天内回复