gpt4 book ai didi

aws-lambda - AWS Cognito 与 ADFS : Issuer doesn't match providerName

转载 作者:行者123 更新时间:2023-12-02 02:49:56 25 4
gpt4 key购买 nike

我正在尝试在无服务器 lambda(在 REST 端点中运行)中设置 AWS.config.credentials。登录来自使用 ADFS 作为联合身份的 Cognito 用户池。我还混合了 Cognito 身份池。

我的 lambda 处理程序具有如下所示的事件、上下文和回调参数:

    exports.handler = (event, context, callback) {       ...    }

event.headers.Authorization 具有一个有效的 JWT(来自 id_token),当在 HTML 客户端上执行对 REST 端点的 POST 调用时,该 JWT 被放置在 Authorization header 中。我在这里亲自验证了 JWT:https://jwt.io 。此外, context.authorizer 对象看起来也有效,表明我已登录,它具有我的电子邮件和用户名信息以及有效的颁发和到期日期。简而言之,我很确定我已经获得了有效的登录信息。

但是当我尝试执行以下命令时,出现错误“NotAuthorizedException:无效的登录 token 。颁发者与提供者名称不匹配”

    AWS.config.credentials = new AWS.CognitoIdentityCredentials({        IdentityPoolId: 'us-east-1:my-identity-pool-id',        Logins: {          "cognito-idp:us-east-1.amazonaws.com/us-east-1_myUserPoolId": event.headers.Authorization        }     });     AWS.config.credentials.get(err => {        if (!err) {          var id = AWS.config.credentials.identityId;          console.log('Cognito Identity ID '+ id);        } else {          console.log('cred error: ', err);        }     });

当然,my-identity-pool-id 和 myUserPoolId 会替换为其实际值。我已经看到有关此主题的许多其他帖子表明错误制定的登录对象会产生此错误,但我已经在这段代码中多次讨论过这个问题 - 并让其他人也帮我检查过。我不认为我把那部分弄错了。就错误文本而言,它实际上是正确的。如果我查看解码后的 JWT,会发现颁发者和提供者名称不同:

    {      "at_hash": "pciSj0Hcjk1Pp9noJIj4GQ",      "sub": "e41500b1-d987-49be-81c0-8fbc36a59ce1",      "email_verified": false,      "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxx",      "cognito:username": "ge2cadmin2-saml-idp_ravi",      "cognito:roles": [        "MyFancyRole"      ],      "aud": "7r7v0ren5fm3m6vmjgj6nasr79",      "identities": [        {          "userId": "ravi",          "providerName": "ge2cadmin2-saml-idp",          "providerType": "SAML",          "issuer": "http://adfs.careevolution.com/adfs/services/trust",          "primary": "true",          "dateCreated": "1590770196859"        }      ],      "token_use": "id",      "auth_time": 1591118267,      "exp": 1591126227,      "iat": 1591122627,      "email": "[email protected]"    }

如您所见,在 identities[] 部分中,发行者是 http://adfs.careevolution.com/adfs/services/trust提供程序名称为 ge2cadmin2-saml-idp。但我认为在这种情况下,这是可以预料的。但是,如果问题确实是这种差异(而不是其他地方的一些错误配置),我该如何设置才能使 AWS.CognitoIdentityCredentials 可以接受与提供者名称不同的颁发者?

最佳答案

答案其实很简单。魔术字符串:“cognito-idp:us-east-1.amazonaws.com/us-east-1_myUserPoolId”不正确。相反,我应该使用:“cognito-idp.us-east-1.amazonaws.com/us-east-1_myUserPoolId”(在cognito-idp后面加一个点而不是冒号)。虽然错误消息很糟糕且具有误导性,但事实证明该错误只是简单的用户错误。

我在此发布此信息是为了帮助任何搜索相同误导性错误消息的人。

关于aws-lambda - AWS Cognito 与 ADFS : Issuer doesn't match providerName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62160813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com