2

我試圖將一些信息保存到我的DynamoDB表中。該表已創建,但我收到以下錯誤。DynamoDB - 請求中包含的安全令牌已過期

Caused by: com.amazonaws.AmazonServiceException: The security token included in the 
request is expired (Service: AmazonDynamoDBv2; Status Code: 400; Error Code:  
ExpiredTokenException; Request ID: MA87ST04UPA57CMUJQIS8DBS4FVV4KQNSO5AEMVJF66Q9ASUAAJG) 

值得一提的是,我設法讓信息保存一次,但在第一次之後不再保存。

這是我的代碼。

public class SignUp extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.test); 

     if (android.os.Build.VERSION.SDK_INT > 9) { 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
     } 
    } 

    public void signUp(View view){ 
     CognitoCachingCredentialsProvider cognitoProvider = new CognitoCachingCredentialsProvider(
      this, // get the context for the current activity 
      "us-east-1:xxxxx", /* Identity Pool ID */ 
      Regions.US_EAST_1   /* Region */ 
     ); 

     AmazonDynamoDBClient ddbClient = new AmazonDynamoDBClient(cognitoProvider); 

     DynamoDBMapper mapper = new DynamoDBMapper(ddbClient); 

     TextView name = (TextView)findViewById(R.id.Name); 
     TextView email = (TextView)findViewById(R.id.email); 
     TextView username = (TextView)findViewById(R.id.username); 
     TextView password = (TextView)findViewById(R.id.password); 
     TextView phone = (TextView)findViewById(R.id.phone); 

     UserInfo userInfo = new UserInfo(); 
     userInfo.setName(name.getText().toString()); 
     userInfo.setEmail(email.getText().toString()); 
     userInfo.setUsername(username.getText().toString()); 
     userInfo.setPassword(password.getText().toString()); 
     userInfo.setPhone(phone.getText().toString()); 

     mapper.save(userInfo); 

     Toast.makeText(this, "Finished!", Toast.LENGTH_LONG).show(); 

    } 
} 

所有幫助表示讚賞。

+0

以下線程似乎可以解決問題。當我稍後有機會時,我會爲此寫下正式答案:https://forums.aws.amazon.com/thread.jspa?messageID=463216 – chaotic3quilibrium

回答

1

如果之前的工作,並沒有現在也許有事情做與此 AWS官方announcement

如果你2015年2月之前創建您的身份池,則需要重新關聯您的角色與您的身份池,以使用此構造函數。爲此,請打開Cognito控制檯,選擇您的身份池,單擊編輯身份池,指定已驗證和未驗證的角色,然後保存更改。

而且說的構造是這樣的:

CognitoCachingCredentialsProvider cognitoProvider = new CognitoCachingCredentialsProvider(
    myActivity.getContext(), // get the context for the current activity 
    "COGNITO_IDENTITY_POOL", /* Identity Pool ID */ 
    Regions.US_EAST_1   /* Region */); 
4

這個錯誤是無關的二月Cognito公告。這看起來像我時鐘偏斜錯誤。如果您已經暫停模擬器一段時間或者更改了手機上的時鐘,則SDK中生成的令牌可能與AWS預期的不匹配。SDK假定可以自動更正時鐘偏移錯誤。你能檢查設備/仿真器上的時鐘,看看這是否是問題嗎?如果是這樣,我會對確切的情況感興趣,以幫助改進SDK。

感謝, 韋斯頓

+0

模擬器與系統時間同步。但我在模擬器中重置內容和設置時解決了這個問題。仍然需要知道它發生的原因:) – iMemon

0

沒關係......在跳來跳去,我看錯上面的Java代碼這實際上是正確地傳遞一個AWSCredentialsProvider(而不是僅僅AWSCredentials)。

相關問題