我必须向AWS IoT核心发送HTTP请求以更新设备影子。此请求应通过Quarkus后端发送。当前的问题是如何将认证头附加到请求. 当前此代码存在身份验证问题。
这是用来发送请求的类
import io.smallrye.mutiny.Uni;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import javax.json.JsonObject;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@Path("/things/abc")
@Produces(MediaType.APPLICATION_JSON)
@RegisterRestClient(baseUri = "https://a144gttuytyty10wv7-ats.iot.us-east-1.amazonaws.com")
public interface OrganizationProxy {
@GET
@Path("/shadow?name=shadow-version-1")
Uni<JsonObject> getOrg();
}
这是测试样例get请求的客户端类
import io.smallrye.mutiny.Uni;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.json.JsonObject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/organizations")
@ApplicationScoped
public class OrganizationResource {
@Inject
@RestClient
OrganizationProxy organizationProxy;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Uni<JsonObject> get() {
return organizationProxy.getOrg();
}
}
我已经尝试附加身份验证标头。但我没有找到在项目中如何做到这一点的方法。我的最终目标是向这个AWS IoT核心设备API发送请求并获得响应。
我用AWS SignV4连接了AWS Iot核心设备Shadow Rest端点。
https://github.com/kavishkamk/AWS-IoT-Core-REST-endpont-with-AWSV4
您计划使用基于X509证书的身份验证还是利用IAM访问密钥和秘密(参见客户端身份验证)?
我建议利用现有的SDK,而不是自己构建。例如,你可以将这个库添加为Maven依赖项
<dependency>
<groupId>software.amazon.awssdk.iotdevicesdk</groupId>
<artifactId>aws-iot-device-sdk</artifactId>
<version>1.11.5</version>
</dependency>
并直接使用这些类。参见https://github.com/aws/aws-iot-device-sdk-java-v2获取示例。