AmazonRekognition-凭证验证/获取凭证失败
最近在对接亚马逊图像检测接口,好几份100多页的英文PDF,让人看得云里雾里,摸不清头脑,好在耐心将涉及到的内容看完。
此处记录在使用Java+sdk调用AmazonRekognition时,无法获取到AWS用户凭证的问题
一、代码错误提示
The security token included in the request is invalid. (Service: AmazonRekognition; Status Code: 400; Error Code: UnrecognizedClientException; Request ID
二、问题分析
1、接口返回信息为token鉴权失败,首先查看是否为凭证信息错误(Q1)。
2、调用AmazonRekognition方法有3中,本地CLI调用、SDK调用、AWS客户端调用,测试CLI(使用同一凭证)调用成功,此时可以排除Q1.
3、排除Q1问题之后,可以确认问题为配置信息未能正常获取到,但是此时AWS官网API给出的文档中调用接口的方式只有:AmazonRekognition amazonRekognition = AmazonRekognitionClientBuilder().defaultClient();
4、但是在查看官方给出的这种默认获取方式的源码中并未找到它底层的获取方式。(也可能时能力不足未发现)
5、此时可以确认官方给出的方法未能正常获取凭证(Q2),所以导致官方验证用户未通过。
6、之前在调用S3的时候我们可以知道,配置文件获取有3种方式:1:环境变量。2:本地配置文件。3:代码中配置文件
7、之前我们验证凭证都是使用本地配置文件。那么在调用AmazonRekognition也同样使用。代码如下:
三、AmazonRekognition接口凭证验证
import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; public static AmazonRekognition getRekognition() { /** * 方法一: */ AWSCredentials credentials = new ProfileCredentialsProvider().getCredentials(); AmazonRekognition amazonRekognition = AmazonRekognitionClientBuilder.standard().withRegion(Regions.US_EAST_1) .withCredentials(new AWSStaticCredentialsProvider(credentials)).build(); /** * 方法二: */ // AmazonRekognition amazonRekognition = AmazonRekognitionClientBuilder.defaultClient(); return amazonRekognition; }
四、pom.xml依赖
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-rekognition</artifactId> <version>1.11.759</version> </dependency>