使用 alibabacloud-dms20250414 SDK (v1.0.4) 调用 GetChatContent API 时出现签名相关错误,但其他 API(CreateDataAgentSession、SendChatMessage、DescribeDataAgentSession)均正常工作。
| 项目 | 版本/值 |
|---|---|
| SDK版本 | alibabacloud-dms20250414 1.0.4 |
| Java版本 | OpenJDK 17.0.18 |
| Spring Boot | 3.2.5 |
| Region | cn-hangzhou / cn-beijing (均测试过,结果相同) |
| Endpoint | dms.{region}.aliyuncs.com |
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibabacloud-dms20250414</artifactId>
<version>1.0.4</version>
</dependency>
StaticCredentialProvider provider = StaticCredentialProvider.create(
Credential.builder()
.accessKeyId(accessKeyId)
.accessKeySecret(accessKeySecret)
.build()
);
AsyncClient client = AsyncClient.builder()
.region("cn-beijing")
.credentialsProvider(provider)
.overrideConfiguration(
ClientOverrideConfiguration.create()
.setEndpointOverride("dms.cn-beijing.aliyuncs.com")
)
.build();
请求参数:
{
"DMSUnit": "cn-beijing",
"title": "beijing-test"
}
阿里云返回:
{
"agentId": "98xx70fkgs1qm0f85wju1lo38",
"sessionId": "dvlizjdvin710i0ap4pn3m9hh",
"agentStatus": "running"
}
请求参数:
{
"DMSUnit": "cn-beijing",
"agentId": "98xx70fkgs1qm0f85wju1lo38",
"sessionId": "dvlizjdvin710i0ap4pn3m9hh",
"messageType": "primary",
"message": "你好"
}
阿里云返回:
{
"data": {
"agentId": "98xx70fkgs1qm0f85wju1lo38",
"message": "success",
"sessionId": "dvlizjdvin710i0ap4pn3m9hh"
},
"errorCode": "Success",
"errorMessage": "",
"requestId": "04074F97-6B09-54D4-9F66-8D4EEAEE6FB6",
"success": "true"
}
请求参数:
{
"DMSUnit": "cn-beijing",
"agentId": "98xx70fkgs1qm0f85wju1lo38",
"sessionId": "dvlizjdvin710i0ap4pn3m9hh"
}
阿里云返回错误:
{
"Code": "SignatureDoesNotMatch",
"Message": "code: 400, Specified signature is not matched with our calculation. server string to sign is: POST&%2F&AccessKeyId%3DLTAI5t6f46Nnua18yxYgXbS1%26Action%3DGetChatContent%26AgentId%3D98xx70fkgs1qm0f85wju1lo38%26DMSUnit%3Dcn-hangzhou%26Format%3DJSON%26SessionId%3Dxxx%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3Dxxx%26SignatureVersion%3D1.0%26Timestamp%3Dxxx%26Version%3D2025-04-14",
"RequestId": "FA294895-B059-5B8D-85A0-59968CCFD182"
}
com.aliyun.sdk.gateway.pop.exception.PopClientException:
(Code: SignatureDoesNotMatch
Message: code: 400, Specified signature is not matched with our calculation.
server string to sign is:
POST&%2F&AccessKeyId%3DLTAI5t6f46Nnua18yxYgXbS1%26Action%3DGetChatContent%26AgentId%3D98xx70fkgs1qm0f85wju1lo38%26DMSUnit%3Dcn-hangzhou%26Format%3DJSON%26SessionId%3Denw8iy7s3j0o3suvynq35fw5q%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3Dc4d811aa-95af-459b-a7bf-b5b42d15e783177836373305631%26SignatureVersion%3D1.0%26Timestamp%3D2026-05-09T21%253A55%253A33Z%26Version%3D2025-04-14
Request ID: FA294895-B059-5B8D-85A0-59968CCFD182
Description: null)
at com.aliyun.sdk.gateway.pop.interceptor.response.TeaResponseInterceptor.modifyResponse(TeaResponseInterceptor.java:82)
at darabonba.core.interceptor.InterceptorChain.modifyResponse(InterceptorChain.java:87)
at darabonba.core.TeaAsyncHandler$RetryableExecutor.lambda$attemptExecute$0(TeaAsyncHandler.java:297)
at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)
at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147)
...
java.lang.NullPointerException: Cannot invoke "String.toLowerCase()" because "key" is null
at com.aliyun.sdk.gateway.pop.auth.SignatureComposer.buildCanonicalizedHeaders(SignatureComposer.java:40)
at com.aliyun.sdk.gateway.pop.auth.SignatureComposer.composeStringToSign(SignatureComposer.java:29)
at com.aliyun.sdk.gateway.pop.interceptor.httpRequest.HttpReqInterceptor.modifyHttpRequest(HttpReqInterceptor.java:105)
at darabonba.core.interceptor.InterceptorChain.modifyHttpRequest(InterceptorChain.java:78)
at darabonba.core.TeaAsyncHandler$RetryableExecutor.attemptExecute(TeaAsyncHandler.java:272)
at darabonba.core.TeaAsyncHandler$RetryableExecutor.retryThenExecute(TeaAsyncHandler.java:229)
at darabonba.core.TeaAsyncHandler$RetryableExecutor.execute(TeaAsyncHandler.java:190)
at darabonba.core.TeaAsyncHandler.execute(TeaAsyncHandler.java:160)
at com.aliyun.sdk.service.dms20250414.DefaultAsyncClient.getChatContentWithResponseIterable(DefaultAsyncClient.java:373)
...
| API | RequestID | 状态 |
|---|---|---|
| CreateDataAgentSession | - | 成功 |
| SendChatMessage | AAB0618A-013D-57D8-9755-6CC5FC22A809 | 成功 |
| SendChatMessage | 04074F97-6B09-54D4-9F66-8D4EEAEE6FB6 | 成功 |
| GetChatContent | FA294895-B059-5B8D-85A0-59968CCFD182 | 失败 |
| GetChatContent | 927AA781-7A8B-57CF-976F-B5599BDB0EE5 | 失败 |
| GetChatContent | 381C16B1-9511-5EBD-9D47-FD0F01E7AC1B | 失败 |
| GetChatContent | 614CD3FC-518E-57A3-B95B-75B2AE7AF0E8 | 失败 |
签名方法不一致: 从错误信息看,SDK 使用 SignatureMethod=HMAC-SHA1, SignatureVersion=1.0,但服务端校验失败
仅 GetChatContent 受影响: 其他 API(CreateDataAgentSession、SendChatMessage、DescribeDataAgentSession)使用相同凭证配置均正常,说明凭证本身没有问题
SDK 内部空指针: getChatContentWithResponseIterable 方法在 SignatureComposer.buildCanonicalizedHeaders 处出现空指针,疑似 SDK 内部 bug,某个 HTTP header 的 key 为 null
Region 无关: 测试了 cn-hangzhou 和 cn-beijing,问题一致
服务器计算的签名字符串:
POST&%2F&AccessKeyId%3DLTAI5t6f46Nnua18yxYgXbS1%26Action%3DGetChatContent%26AgentId%3D98xx70fkgs1qm0f85wju1lo38%26DMSUnit%3Dcn-hangzhou%26Format%3DJSON%26SessionId%3Dxxx%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3Dxxx%26SignatureVersion%3D1.0%26Timestamp%3Dxxx%26Version%3D2025-04-14
https://help.aliyun.com/zh/dms/data-agent-openapi-integration-guide
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。