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>