美好的一天,
我有一个API设置,它位于AWS的APIGateway后面,使用IAM保护,在这种情况下它是一个Cognito联合ID池。
我有以下代码:
function doFacebookLogin() {
FB.login(function (response) {
fbAuthToken = response.authResponse.accessToken;
doFetchProfile();
}, {scope: 'public_profile,email', return_scopes: true});
}
function doFetchProfile() {
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'eu-west-1:*****************************',
Logins: {
'graph.facebook.com': fbAuthToken
}
});
// Obtain AWS credentials
AWS.config.credentials.get(function () {
apigClient = apigClientFactory.newClient({
accessKey: AWS.config.credentials.accessKeyId,
secretKey: AWS.config.credentials.secretAccessKey,
sessionToken: AWS.config.credentials.sessionToken,
region: 'eu-west-1'
});
apigClient.userProfileGet({
'x-fb-access-token': fbAuthToken
}).then(function (data) {
console.log(data);
});
});
}
现在,我正在标题中发送Facebook AccessToken,因为我的服务器(位于AWS APIGateway后面)需要访问用户的Facebook个人资料数据。
我希望通过简单地使用Facebook提供商登录Cognito Federated ID池,就足以让AWS的APIGateway SDK与每个请求一起传递accessToken(以某种形式或其他形式)。
似乎并非如此,我无法找到一种方法来提取我需要的Facebook数据,而无需按照上面的示例在标题中发送AccessToken。
我对应该发生的事情的理解是错误的吗?
感谢您的帮助:)
答案 0 :(得分:0)
如果您在API网关后面的服务器需要Facebook访问令牌来访问某些Facebook API,那么您总是需要通过API GW传递Facebook访问令牌。
Cognito联合登录允许您为AWS凭据交换Facebook令牌以访问受AWS保护的服务。