Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用AWS cognito和javascript创建登录_Javascript_Amazon Web Services_Cookies_Login_Aws Cognito - Fatal编程技术网

使用AWS cognito和javascript创建登录

使用AWS cognito和javascript创建登录,javascript,amazon-web-services,cookies,login,aws-cognito,Javascript,Amazon Web Services,Cookies,Login,Aws Cognito,我正在创建一个登录页面。其思想是获取用户名和密码,然后使用它从AWS cognito用户池中获取id令牌 然后我需要将令牌存储在数据库中,并将该令牌与用户名一起传输到index.html。这是因为index.html需要令牌使用相同的id令牌向API网关发出post请求,并且需要知道用户名以跟踪当前登录的用户 现在index.html必须检查传输给它的令牌是否与数据库中的令牌匹配 如果存在,并且令牌未过期,则不存在重定向,否则index.html将重定向到login.html 问题是我的后端完全

我正在创建一个登录页面。其思想是获取用户名和密码,然后使用它从AWS cognito用户池中获取id令牌

然后我需要将令牌存储在数据库中,并将该令牌与用户名一起传输到index.html。这是因为index.html需要令牌使用相同的id令牌向API网关发出post请求,并且需要知道用户名以跟踪当前登录的用户

现在index.html必须检查传输给它的令牌是否与数据库中的令牌匹配

如果存在,并且令牌未过期,则不存在重定向,否则index.html将重定向到login.html

问题是我的后端完全依赖于Amazon Lambda函数和API网关,因为我的公司不希望我使用任何后端语言。现在,我发现lambda函数既不能设置浏览器cookie,也不能读取浏览器cookie


这让我别无选择,只能使用javascript cookies、会话和本地存储将令牌和用户名传输到index.html。然而,这种方法被认为是不安全的

没有任何关于使用cognito的安全登录系统的教程

注意:任何其他安全登录系统都可以完成这项工作,但请记住,我需要将用户名和密码传递给用户池以获取ID令牌,这意味着,如果我使用任何其他登录方法,然后我现在需要将用户名和密码都传递给索引,以便索引可以向用户池发出请求,以获取id令牌并向API网关发出请求

现在我的问题是,有没有一种方法可以在不影响安全性的情况下将数据从登录转移到索引?我可以以任何其他方式使用lambdas来转移代币吗

请帮忙。提前谢谢

现在,我发现lambda函数既不能设置浏览器cookie,也不能读取浏览器cookie

我不认为这完全是真的

使用可使Lambda函数了解并控制HTTP请求的许多方面。这包括设置和读取任意标题(包括
设置cookie

为了演示,您可以设置如下函数,并向其附加API网关触发器(启用Lambda代理集成):

此函数返回一个
Set Cookie
头,浏览器将尊重该头,并将其与将来的请求一起发送到此域。如果在浏览器中点击两次,您将看到浏览器发送的cookie,并在第二次请求时由lambda记录


如果您不愿意使用Lambda代理集成,您可能仍然可以通过API网关实现这一点。

“但是,这种方法被认为是不安全的”,需要引用。是谁干的?用什么方法做?因为使用令牌的确切原因是:允许身份验证而不披露凭据。对不起,我的意思是使用javascript cookies被认为是不安全的,而不是令牌。@Federico klez Culloca:我只是不知道是否有办法将仅HTTP cookies传输到index.html。或者,如果有一种完全不同的方式,我可以在不损害安全性的情况下将令牌和用户名传输到索引。因为我不能使用PHP或node,所以我只能使用javascript和AWS lambdas。代码位于github:中,用例号:26。我已经尝试过了,但它导致了一个错误:AWSCognito.CognitoIdentityServiceProvider.CookieStorage不是构造函数。我在谷歌上搜索了错误,但找不到结果,所以如果有人也能帮我的话。我也无法通过
CognitoIdentityServiceProvider
解决
CookieStorage
问题,但你可以从“amazon cognito identity js”导入{CookieStorage}并直接使用它(
newcookiestorage()
),或者从“amazon Cognito identity js”导入*作为Cognito并像使用新Cognito.CookieStorage()一样使用它。但是,您将无法使用它创建
HttpOnly
cookies。谢谢@Mike Patrick。我一定会试试这个。我的第一个方法是使用lambda函数。所以是的,我一定会用这个方法。另外,我提前问这个问题,因为我没有找到这个问题的正确答案。lambda函数在设置这些cookie之后是否也可以读取它们?因为那会彻底解决我的问题。再一次,非常感谢。@Namah是的,它可以。发送到Lambda的所有Cookie都位于
Cookie
标题中,该标题可通过
event.headers.Cookie
获得。您的lambda必须解析此标头的内容。在我的示例中,标题将包含
testcook=testval
exports.handler = (event, context, callback) => {
    var returnobj = {
        "statusCode": 200,
        "headers": {
            "Content-Type": "application/json", "access-control-allow-origin": "*", 
            "Set-Cookie": "testcook=testval; path=/; domain=xxxxxxxxxx.execute-api.us-east-1.amazonaws.com; secure; HttpOnly"
        }, 
        "body": JSON.stringify({})
    };
    console.log("headers", event.headers.Cookie);
    callback(null, returnobj);
};