Error 400: Invalid Account Linking Credentials When Enabling an Alexa Skill

750 views Asked by At

I am trying to implement app-to-app account linking for alexa skills with my app.

I have followed the guide found here https://developer.amazon.com/en-US/docs/alexa/account-linking/app-to-app-account-linking-starting-from-your-app.html and have reached Step 6: Enable the skill and complete account linking. At this point, I am creating the final post request within an AWS lambda function using axios. The request is of the following form:

const header = {
    "headers": {
        "Content-Type": "application/json",
        "Authorization": "Bearer " + event.amazonAccessToken
    }        
};

const body = {
    "stage": event.skillStage,
    "accountLinkRequest": {
        "redirectUri": event.redirectURI,
        "authCode": event.userAuthorizationCode,
        "type": "AUTH_CODE"
    }
};

and I am sending the post request to each of the possible regional endpoints and using the one call that succeeds, as shown in the guide's sample code.

endpoints.forEach((endpoint)=> {
    alexaServicePromises.push(axios.post(endpoint, body, header).catch(function(error) {
        if (error.response) {
            console.log(error.response.data);
            console.log(error.response.status);
            console.log(error.response.headers);
        }
    }));
});

return new Promise((resolve, reject) => {
    var failures = 0;
    alexaServicePromises.forEach((promise) => {
        promise.then((res)=> {
            if (res.status == 201 || res.status == 200) {
                resolve(res.data);
            } else {
                if (++failures == alexaServicePromises.length) {
                    reject(res.data);
                }
            }
        }).catch((err)=> {
            if (++failures == alexaServicePromises.length) {
                reject(err.data);
            }
        })
    })
});

However, the issue is that each of the three calls to each endpoint are returning error code 400 with message: 'Invalid account linking credentials'. I am completely unable to solve this problem. Each of the previous steps are running perfectly, I am sending the Amazon access token from step 5, skill stage is 'development' (skill is not published), redirectUri is the uri used in step 4 when I obtained an Amazon authorization code to redirect the user back into the app, the user authCode I am sending was returned from directing the user to sign into our authentification service (Cognito), and I am sending the skill id in the url used in the axios post request. The account I am testing with is my Amazon developer account with access to the skill (I did not create the skill though), and I am using the Alexa client ID and secret found in the account linking and permissions tab of the skill. Finally, each time I test, it is running the whole process, getting me a new authorization code, exchanging for a new token, signing in for a new user auth code, and then sending everything needed to this lambda function.

I have also seen the post here Alexa Account Linking - "Invalid account linking credentials", and from what I wrote above, I don't think I'm making any of the 4 mistakes.

How can I fix this?

0

There are 0 answers