【问题标题】:How to validate getOpenIdTokenForDeveloperIdentity cognito token如何验证 getOpenIdTokenForDeveloperIdentity 认知令牌
【发布时间】:2016-07-26 04:11:31
【问题描述】:

我正在使用 aws lambdas、dynamodb 和 cognito 构建身份验证系统。

我一直在比较 getOpenIdTokenForDeveloperIdentity(); 提供的令牌;从服务器调用一个以获取特定身份。

我正在通过以下方式获取令牌和身份:

function getToken(email, fn) {
    var param = {
        IdentityPoolId: cognitoIdentityPoolId,
        Logins: {} // To have provider name in a variable
    };
    param.Logins[cognitoDeveloperProvidedName] = email;
    cognitoidentity.getOpenIdTokenForDeveloperIdentity(param,
        function(err, data) {
            if (err) return fn(err); // an error occurred
            else fn(null, data.IdentityId, data.Token); // successful response
        });
}

然后据我了解,我可以像这样从 cognito 获取已经生成的令牌(而不是创建新令牌):

function checkToken(IdentityId, email, fn){
    var param = {
        IdentityPoolId: cognitoIdentityPoolId,
        IdentityId: IdentityId,
        Logins: {}
    };
    param.Logins[cognitoDeveloperProvidedName] = email;
    cognitoidentity.getCredentialsForIdentity(param, 
        function(err, data) {
            if (err) return fn(err);
            else fn(null, data);
        });
}

但我似乎无法让它工作

有什么想法吗?

【问题讨论】:

    标签: javascript amazon-web-services aws-lambda amazon-cognito


    【解决方案1】:

    想通了,checkToken 函数应该是这样的:

    function checkToken(providedIdentity, token, fn){
        var param = {
            IdentityId: providedIdentity,
            Logins: {}
        };
        param.Logins['cognito-identity.amazonaws.com'] = token;
        cognitoidentity.getCredentialsForIdentity(param, 
            function(err, data) {
                if (err) return fn(err);
                else fn(null, data);
            });
    }
    

    我需要将 cognito-identity.amazonaws.com 设置为登录提供程序

    【讨论】:

    • 是的,一旦您获得 cognito 令牌,供应商现在就是 cognito-identity.amazonws.com,正如您所发现的那样。
    • 在文档中不是很清楚,必须找到一个用 Java 编写的示例才能弄清楚,希望有人能找到这篇文章并节省我花在上面的 3 个小时。
    • 嗨@MarkMercurio 和Cub3。您能否澄清此 checkToken 函数是否用于检查来自客户端的令牌?我的意思是,如果令牌是在登录 API 方法中生成的(使用 getOpenIdTokenForDeveloperIdentity)并将令牌发送到客户端,那么客户端会使用此令牌调用其他方法,因此需要使用 getCredentialsForIdentity 进行令牌验证。它是否正确?我应该将用户的身份标识存储在我的数据库中吗?提前谢谢你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 2011-03-05
    • 2018-10-16
    • 2011-04-25
    • 2021-10-11
    • 2017-12-14
    相关资源
    最近更新 更多