【发布时间】:2023-03-08 08:41:02
【问题描述】:
我正在创建一个 api,我只希望我的身份池中经过身份验证的用户可以访问它。 api 调用返回“hello world”的 lambda 函数。当我在我的 api 中未设置身份验证时,它工作正常,但是当我创建自定义授权方并将其设置为我的 api 的身份验证方法时,它返回 null。
This is the link I used to help create my custom authenticator
这是我做过的事情的清单:
我正在使用联邦身份,并确保我在 authorizer.js 中正确复制了身份池 ID 和区域。
我添加了 Authenticated 角色,在我的联合身份中设置,ARN 在创建我的自定义授权方时进入执行角色(不确定我是否应该这样做)。
在我的身份访问管理中,我将 AmazonAPIGatewayInvokeFullAccess 策略附加到 Cognito 授权角色。
当我没有传递任何标头并进行 api 调用时,我收到一条未经授权的消息。
当我在标头中传递一个假令牌并进行 api 调用时,我收到一条空消息。
当我在标头中传递 AWS 提供的令牌并进行 api 调用时,我收到一条空消息。
当我尝试在 AWS 中测试 api 调用时,我得到了 200 的返回状态和“Hello World”消息
有人知道问题是什么以及如何解决吗?
-更新-
这是我从链接中的 authorizer.js 文件修改的区域。
console.log('Loading function');
var jwt = require('jsonwebtoken');
var request = require('request');
var jwkToPem = require('jwk-to-pem');
var userPoolId = '{REPLACE_WITH_YOUR_POOL_ID}';
var region = '{REPLACE_WITH_YOUR_REGION}'; //e.g. us-east-1
var iss = 'https://cognito-idp.' + region + '.amazonaws.com/' + userPoolId;
var pems;
我唯一做的就是添加我的同源 userPoolId 和区域。
【问题讨论】:
-
您希望人们如何在没有看到您的实际代码的情况下帮助您?
-
如果您单击我发布的链接,请转到“为 Amazon Cognito 用户池开发自定义授权方”部分并查看第 1 步,它会告诉您下载包含我使用的确切代码的蓝图为授权人。我输入了我的 userPoolId 和区域。我使用“curl”命令通过终端拨打了其余电话。
-
此处有关堆栈溢出的问题必须包括粘贴到问题中的相关代码,以便在此处考虑主题。外部链接有消失或改变的习惯,使问题无法作为长期参考。此外,我们需要在适当的上下文中查看您的代码,而不是在其上下文中查看一些示例代码。
-
我应该如何复制 400 多行代码并正确格式化,以便它可以在代码标签中?我尝试了复制粘贴,但它无法正常工作。我在链接上使用了 99.9999999999999999999999999% 的示例代码。我所做的唯一修改是添加了来自 cognito 和 region 的 userPoolId,这是在其中一个步骤中指示的,我不打算向公众共享该信息。
-
嗯,您确实需要学习如何在此站点中正确格式化代码才能有效地使用此站点。然后,直接从帮助页面:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身中重现它所需的最短代码.没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小、完整和可验证的示例。您有责任弄清楚如何包含该信息。
标签: node.js amazon-web-services integration amazon-cognito aws-api-gateway