Oauth 2.0 Alexa技能激活API中的重定向uri是什么?

Oauth 2.0 Alexa技能激活API中的重定向uri是什么?,oauth-2.0,alexa,alexa-account-linking,Oauth 2.0,Alexa,Alexa Account Linking,背景 我正在实现Alexa的流程,我被困在第6步——使用Alexa的流程启用技能 具体来说,我不确定向redirect\u uriPOST字段提供什么值。文件中提供了以下说明: 授权请求中包含的redirect_uri参数到OAuth 2.0服务器以获取用户的授权代码。这使Amazon能够从令牌服务器检索访问令牌。此URL对Amazon必须是不透明的 我的理解是Alexa想用现有的授权代码交换访问令牌,但我不知道Alexa是如何“秘密”完成这一任务的,我目前的方法抛出了一个400错误 错误消息

背景

我正在实现Alexa的流程,我被困在第6步——使用Alexa的流程启用技能

具体来说,我不确定向
redirect\u uri
POST字段提供什么值。文件中提供了以下说明:

授权请求中包含的redirect_uri参数到OAuth 2.0服务器以获取用户的授权代码。这使Amazon能够从令牌服务器检索访问令牌。此URL对Amazon必须是不透明的

我的理解是Alexa想用现有的授权代码交换访问令牌,但我不知道Alexa是如何“秘密”完成这一任务的,我目前的方法抛出了一个400错误

错误消息

[status]  400
[response]  {"message":"Could not contact provider of account linking credentials"}
注释

  • 我的应用程序使用Firebase身份验证,并通过与Google和Facebook的联合登录为用户创建帐户。因此,Google和Facebook重定向回我的原生应用程序(React native)
  • 我没有一个普遍的联系;相反,在我的账户链接流中, Alexa应用程序将用户重定向到一个html页面,该页面使用自定义模式重定向到我的应用程序
  • 当用户从Alexa登录到我的应用程序时,Alexa会将他们从我的登录页面重定向回Alexa应用程序。在本例中,Alexa universal链接是重定向url
  • 当用户从我的应用程序登录Alexa时(应用程序到应用程序链接),Alexa应用程序会将他们重定向到我的应用程序。我的应用是重定向url
我曾尝试使用我的应用程序的[faux]“universal link”作为重定向url,但没有成功。我的登录流中没有其他重定向。这个url应该是什么

注意:我有一个端点,用于将身份验证代码交换为访问令牌。令牌在主体中返回;没有将访问令牌附加到重定向url的重定向

示例技能激活(我的React原生应用程序):

async enableSkill(){
试一试{
let response=等待获取(`https://api.amazonalexa.com/v1/users/~current/skills/${this.skillId}/enablement`{
方法:“POST”,
标题:{
'Authorization':`Bearer${this.alexaAccessToken}`,
“内容类型”:“应用程序/json”
},
正文:JSON.stringify({
阶段:'开发',//或现场
accountLinkRequest:{

redirectUri:Linking.makeUrl(),//我认为不可能同时使用不同的OAuth服务器,如Google和Facebook。我不确定是否可以使用firebase作为OAuth服务器

在技能的“帐户链接”选项卡中,必须输入要使用的OAuth服务器的详细信息,并且必须在accountLinkRequest中输入用于OAuth登录此服务器的重定向URI


当您拥有自己的OAuth服务器时,请确保它在端口443上运行。我花了好几个小时才发现它与我的Node.js后端使用的端口3000不兼容。

我也遇到了同样的情况,您能否帮我提供一个指南,让我设置oautj端点以共享alexa docs中定义的用户授权代码?
async enableSkill() {
    try {
        let response = await fetch(`https://api.amazonalexa.com/v1/users/~current/skills/${this.skillId}/enablement`, {
            method: 'POST',
            headers: {
                'Authorization': `Bearer ${this.alexaAccessToken}`,
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
                stage: 'development', // or live
                accountLinkRequest: {
                    redirectUri: Linking.makeUrl(), // <--- unsure
                    authCode: this.myAppAuthCode, // <-- auth code from my system, not Alexa's
                    type: "AUTH_CODE"
                }
            })
        });

        return response.json();
    } catch (err) {
        throw new Error(err);
    }
}