我寫灰燼應用程序,我想允許用戶上傳PDF文件,而我使用AWS的S3用於文件存儲。由於我不想對AWS信用卡進行硬編碼,因此我正在使用AWS Cognito創建臨時憑證,以便在用戶想要上傳/下載文件時對S3進行身份驗證。我創建了一個身份池在AWS的用戶,並配置了驗證和未經驗證的用戶關聯的IAM角色(身份驗證的用戶獲得只讀到我的S3容器中的一個訪問)。我正在使用我的Rails後端(它使用Devise)作爲身份池的身份驗證提供程序。對於我的前端身份驗證,我使用Ember Simple Auth和提供的Devise身份驗證器,因此用戶必須登錄才能請求令牌。下面是我拿,以獲得臨時憑證的步驟:AWS Cognito臨時憑證中的Cookie
1)從我的後端獲取一個AWS Cognito標識ID和令牌(使用我的後端從紅寶石AWS SDK get_open_id_token_for_developer_identity法)
2)創建一個新的CognitoIdentityCredentials使用Identity Id和Token來獲取臨時憑證,並將這些憑證存儲在cookie中(使用js-cookie)。
代碼:
var AWS = window.AWS;
AWS.config.region = "us-west-2";
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-west-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
IdentityId: response.identity_id,
Logins: {
'cognito-identity.amazonaws.com': response.token
}
});
AWS.config.credentials.get(function() {
var date = new Date(AWS.config.credentials.expireTime);
Cookies.set("cognito_creds", { accessKeyId: AWS.config.credentials.accessKeyId, secretAccessKey: AWS.config.credentials.secretAccessKey, sessionToken: AWS.config.credentials.sessionToken }, { expires: date });
});
我明白,存儲重要信息,如在cookie AWS憑證是一大禁忌,而肯定是不安全的。但請記住,我使用的是HTTPS,憑證在一小時後過期,與憑證關聯的IAM角色只能爲我的S3存儲桶之一提供只讀訪問權限。
我的問題是:是否值得安全風險來存儲這些creds餅乾,這樣我就不必從我的後端獲取令牌每一個頁面刷新,還是這種方式離開我太脆弱?
編輯:爲了闡明,我想要的替代解決方案是將憑證作爲屬性存儲在前端的Ember服務上,並在每次頁面重新加載時從我的後端獲取令牌,看起來非常有效。