使用sts令牌而不是user / pass进行用户身份验证检查

时间:2017-06-06 18:18:11

标签: amazon-web-services amazon-cognito

我是知识分子的新手。这是我想要做的:

我有一些用户,我希望他们登录我的网站然后只要他们的会话有效我想保留他们而不强迫他们登录。所以据我所知,我需要生成STS使用cognito的令牌并发送给用户,然后在下一次调用中,用户将sts令牌作为标题发送,我使用cognito检查sts令牌,如果有效,我将为用户提供服务。

为此,我使用以下链接中的说明:

https://github.com/aws/amazon-cognito-identity-js/

具体而言,我使用此部分来验证用户身份并建立会话:

var authenticationData = {
    Username : 'username',
    Password : 'password',
};
var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);
var poolData = {
    UserPoolId : '...', // Your user pool id here
    ClientId : '...' // Your client id here
};
var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
var userData = {
    Username : 'username',
    Pool : userPool
};
var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
    onSuccess: function (result) {
        console.log('access token + ' + result.getAccessToken().getJwtToken());

        //POTENTIAL: Region needs to be set if not already set previously elsewhere.
        AWS.config.region = '<region>';

        AWS.config.credentials = new AWS.CognitoIdentityCredentials({
            IdentityPoolId : '...', // your identity pool id here
            Logins : {
                // Change the key below according to the specific region your user pool is in.
                'cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>' : result.getIdToken().getJwtToken()
            }
        });

        // Instantiate aws sdk service objects now that the credentials have been updated.
        // example: var s3 = new AWS.S3();

    },

    onFailure: function(err) {
        alert(err);
    },

});

到目前为止一切顺利。但是,现在在任何后续通话中我都不想发送

var authenticationData = {
Username : 'username',
Password : 'password',
};

而我想使用sts令牌来验证用户:

var authenticationData = {
    sts: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
};
var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);

我没有看到任何这种情况的例子或用法。 Cognito是否适用于此场景,如果是,我该如何使用sts进行身份验证检查?

1 个答案:

答案 0 :(得分:1)

我发现您在身份验证回调中使用了AWS.CognitoIdentityCredentials。如果您的应用需要AWS凭据来访问各种AWS服务,则会使用该功能。

如果您的用户仅与您自己的网站进行互动,则默认情况下,成功进行用户身份验证后获得的会话最长有效期为30天。

您可以通过在CognitoUser上调用getSession来检查会话是否处于活动状态

https://github.com/aws/amazon-cognito-identity-js/blob/9e949c08188f13b8087106564e7b596ec58117ab/src/CognitoUser.js#L826

您可以通过在Cognito User Pool控制台中更改客户端的刷新令牌有效性来配置该持续时间。