2015-09-16 8 views
6

私は開発者認証のIDを使用してクライアント側のブラウザでCognitoを通じて認証しています。私のページが読み込まれる(またはリフレッシュされる)とき、オブジェクトが期限切れでない限り(私はそれが約1時間続くと思います)、アイデンティティを覚えておきたいです。しかし、私はCognitoからIDを取得する方法を知らず、開発者の認証をやり直す必要はありません。 、私はすでにログインして、ページを更新している場合はブラウザ内のページにCognito IDを保持する方法

cognitoCredentials.params.IdentityId = output.identityId; 
cognitoCredentials.params.Logins = { 
    'cognito-identity.amazonaws.com': output.token 
}; 
cognitoCredentials.expired = true; 

var cognitoCredentials 

$(document).ready(function() { 
    "use strict"; 

    cognitoParams = { 
     IdentityPoolId: 'us-east-1:xxxxxxx' 
    }; 

    cognitoCredentials = new AWS.CognitoIdentityCredentials(cognitoParams); 
    AWS.config.credentials = cognitoCredentials; 

}); 

と開発者の認証経由でログインした後:ここで

コードは、ページの読み込みに何をするかですもう一度ログインしようとすると、私がすでにIDを持っているときにIDを取得しようとしているというエラーが表示されます Error: Missing credentials in config(…) NotAuthorizedException: Missing credentials in config "Access to Identity 'us-east-1:91fa684a-3d30-4b38-8705-450f10f086af' is forbidden."

しかし、私はそれにアクセスする方法を知らない。ページが更新されると、Cognitoが提供する以前のIDを検出できるように、資格情報を取得するにはどうすればよいですか?

答えて

2

ページの更新時に同じIDに戻す唯一の方法は、そのIDを初期化するために使用されたのと同じトークンを使用することです。問題は似ているので、this questionを参照してください(開発者が認証したIDフローのOpenId ConnectトークンでFacebookトークンを置き換える)。

この質問の内容を繰り返し記入してください:SDK内の資格情報はページ間で保持されないため、再利用するためにトークンをキャッシュする必要があります。

+2

それは自動的に期限切れになるように、トークンをキャッシュするためのベストプラクティスはありますか?たとえば、localStorageではなくsessionStorageを使用する必要がありますか? – JBaczuk

+1

読書では、ブラウザの記憶装置やクッキーのように見えますが、それぞれに賛否両論があります:https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/ – JBaczuk

7

少なくともaccessKeyId, secretAccessKey, sessionTokensessionStorageページで保存します。 AWS SDKがロードされた後、これらをAWS.config.credentialsに読み込むことができます。 Cognitoが応答するのを待つよりもはるかに高速です。プロビジョニングプロバイダのトークンを使用して手動で更新する必要があります。これは、一時的なトークンが期限切れになるまで(〜1時間)有効です。

var credKeys = [ 
 
    'accessKeyId', 
 
    'secretAccessKey', 
 
    'sessionToken' 
 
]; 
 

 
// After Cognito login 
 
credKeys.forEach(function(key) { 
 
    sessionStorage.setItem(key, AWS.config.credentials[key]); 
 
}); 
 

 
// After AWS SDK load 
 

 
AWS.config.region = 'us-east-1'; // pick your region 
 

 
credKeys.forEach(function(key) { 
 
    AWS.config.credentials[key] = sessionStorage.getItem(key); 
 
}); 
 

 
// Now make your AWS calls to S3, DynamoDB, etc

+0

私たちはキャッシングしていましたが、それを削除したので、おそらくそれを元に戻すつもりです。 cognitoはプロバイダートークンから複数のページのシナリオでは使用できないstに行くのに約2秒(平均)を要します。私はこれがsdkによってちょうどサポートされたことを望みます。 –

関連する問題