使用 Cognito 授权方从 API 网关返回 401 - 无论传入什么
401 returned from API gateway using Cognito authorizer - no matter what is passed in
我让用户能够登录、注销、注册、重置密码 - 所有这些都在我的 React.js 代码中使用 AWS amplify。
他们登录后,我想获取我的 API 网关,即使用 Authorization: UserCognito,然后转到一个 lambda 函数,我希望能够在其中提取数据从 dynamoDB 传递到我的 API 和 return 他们的信息以及他们的个人资料信息(例如姓名、照片、电子邮件)。
当我获取 API 时,我得到 {"message":"Unauthorized"}
我这样调用 api:
getProfileInfo(user.signInUserSession.idToken.jwtToken).then(user => {
console.log(user);
});
甚至尝试过这个:
```
let token = await Auth.currentCredentials();
console.log(token);
const options = {
method: "POST",
headers: {
"content-type": "application/json",
Authorization: token.sessionToken
}
};
let res = GetProfileInfo(token.sessionToken);
API.post("XXURL", "", options);
````
getProfileInfo 看起来像:
const getProfileInfo = async user => {
let url = XXXXXXXX
console.log(user);
const data = await fetch(url, {
method: "POST",
headers: {
"content-type": "application/json",
Authorization: user
},
mode: "cors"
})
.then(response => {
console.log(response);
return response.json();
})
.then(data => {
return data;
})
.catch(error => {
return error;
});
return data;
那么 - 我如何将我的用户信息从 AWS-amplify 传递到我的 API, 在反应前端 - 这样它就可以授权他们,然后 运行 我的 lambda 函数,我在其中获取他们的用户信息并在我的 DynamoDB 中查找他们的个人资料?
我的 API 网关在设置我的授权方时将令牌分配给 Authorization
的值。
此外,我为我的 API 设置了模板映射,如下所示:
```
{
"context" : {
"sub" : "$context.authorizer.claims.sub",
"email" : "$context.authorizer.claims.email"
}
}
```
但仍然 return 编辑了未授权。那我做错了什么?
如果您在 getProfileInfo()
中的 user
中确实有一个有效的 JWT,那么请尝试使用
headers: {
...
Authorization: 'Bearer ' + user
}
也许您还想验证您在 jwt.io
等网站上是否拥有有效令牌
我让用户能够登录、注销、注册、重置密码 - 所有这些都在我的 React.js 代码中使用 AWS amplify。
他们登录后,我想获取我的 API 网关,即使用 Authorization: UserCognito,然后转到一个 lambda 函数,我希望能够在其中提取数据从 dynamoDB 传递到我的 API 和 return 他们的信息以及他们的个人资料信息(例如姓名、照片、电子邮件)。
当我获取 API 时,我得到 {"message":"Unauthorized"}
我这样调用 api:
getProfileInfo(user.signInUserSession.idToken.jwtToken).then(user => {
console.log(user);
});
甚至尝试过这个:
```
let token = await Auth.currentCredentials();
console.log(token);
const options = {
method: "POST",
headers: {
"content-type": "application/json",
Authorization: token.sessionToken
}
};
let res = GetProfileInfo(token.sessionToken);
API.post("XXURL", "", options);
````
getProfileInfo 看起来像:
const getProfileInfo = async user => {
let url = XXXXXXXX
console.log(user);
const data = await fetch(url, {
method: "POST",
headers: {
"content-type": "application/json",
Authorization: user
},
mode: "cors"
})
.then(response => {
console.log(response);
return response.json();
})
.then(data => {
return data;
})
.catch(error => {
return error;
});
return data;
那么 - 我如何将我的用户信息从 AWS-amplify 传递到我的 API, 在反应前端 - 这样它就可以授权他们,然后 运行 我的 lambda 函数,我在其中获取他们的用户信息并在我的 DynamoDB 中查找他们的个人资料?
我的 API 网关在设置我的授权方时将令牌分配给 Authorization
的值。
此外,我为我的 API 设置了模板映射,如下所示:
```
{
"context" : {
"sub" : "$context.authorizer.claims.sub",
"email" : "$context.authorizer.claims.email"
}
}
```
但仍然 return 编辑了未授权。那我做错了什么?
如果您在 getProfileInfo()
中的 user
中确实有一个有效的 JWT,那么请尝试使用
headers: {
...
Authorization: 'Bearer ' + user
}
也许您还想验证您在 jwt.io
等网站上是否拥有有效令牌