我们使用 Oauth 2.0 隐式授权设置 Cognito 用户池作为允许的 Oauth 流程,并希望我们基于 JS 的 Web 应用程序能够使用 Cognito JWT 令牌作为请求授权标头的一部分来调用 lambda 函数(具有 API 网关端点)。 我们通过使用默认的 Cognito 托管 UI 输入用户名和密码,然后将成功登录 URL 中的 access_token 复制粘贴到 Postman,测试了 Postman 的身份验证。这很好用。 但是,当我们使用下面的 amazon-cognito-identity.min.js SDK 函数进行身份验证时(我们的应用程序使用 jQuery 而不是像 React 这样的框架),则 authenticateUser 函数成功但 Cognito 响应包含错误的 JWT 令牌(当我们将令牌复制粘贴到 Postman 中以测试与我们在托管 UI 上成功执行的相同的 lambda 函数时,令牌不起作用。
我们的 JS 代码如下所示:
var authentication_details = new AmazonCognitoIdentity.AuthenticationDetails({
Username: email,
Password: $('#password').val(),
});
var cognito_user = new AmazonCognitoIdentity.CognitoUser({
Username: email,
Pool: cognito_user_pool
});
cognito_user.authenticateUser(authentication_details, {
onSuccess: function (result) {
var jwt_token = result.getAccessToken().getJwtToken(); // THIS TOKEN DOES NOT WORK AND IS LONGER THAN THE TOKEN GENERATED BY THE COGNITO HOSTED UI
....
result.getAccessToken().getJwtToken() 返回“未经授权”。
我们在线搜索但找不到任何提示,说明为什么从 authenticateUser 返回参数获取的令牌会有所不同。 此外,我们使用 result.getIdToken().getJwtToken() 对 ID 令牌进行了测试,但它不起作用。 我们的错误是什么? 开发工具包:amazon-cognito-identity.min.js