使用Facebook登录从AWS“CognitoIdentityCredentials”获取FB用户的数据

时间:2017-07-12 14:12:08

标签: amazon-web-services facebook-graph-api aws-api-gateway

美好的一天,

我有一个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。

我对应该发生的事情的理解是错误的吗?

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

如果您在API网关后面的服务器需要Facebook访问令牌来访问某些Facebook API,那么您总是需要通过API GW传递Facebook访问令牌。

Cognito联合登录允许您为AWS凭据交换Facebook令牌以访问受AWS保护的服务。

相关问题