我有一个 GraphQL API Gateway 端点,它位于自定义身份验证功能的后面,我还希望允许某些端点供“未经身份验证”的用户使用(我的 Cognito 用户池允许)。
目前,自定义身份验证器仅适用于 Cognito 身份验证会话。此函数验证从客户端传递的 Cognito 令牌(根据此逻辑),生成 IAM 允许策略,然后将其传递给 GraphQL 函数。
我可以使用Amplify 库在我的客户端上生成未经身份验证的会话,并将 sessionToken 作为我的“授权”标头值附加:
Auth.currentCredentials().then((credentials: ICredentials) => {
this.unauthenticatedCredentials = credentials; // credentials.sessionToken
});
但是,将其按原样通过我的自定义授权方会引发错误token is expired。
根据 Cognito 令牌反序列化程序(上面的链接),声明到期日期:<5 天前(在清除本地存储后测试)。
如果这是可能的,我如何生成允许策略并根据未经身份验证的用户会话获取声明?
注意:我已经看到了创建第二个相同的 GraphQL 端点的选项,该端点提供我想要允许的功能而无需身份验证,但我试图避免它,因为它似乎在架构上是错误的。