【问题标题】:What is the redirect_uri in Alexa Skill Activation API?Alexa Skill Activation API 中的 redirect_uri 是什么?
【发布时间】:2019-12-15 22:29:27
【问题描述】:

背景

我正在实施 Alexa 的 App-to-App Account Linking Flow,但我被困在第 6 步 - 使用 Alexa 的 Skill Activation API 启用技能。

具体来说,我不确定为redirect_uri POST 字段提供什么值。在文档中,提供了以下描述:

包含在向您的 OAuth 2.0 服务器的授权请求中包含的 redirect_uri 参数,用于获取用户的授权代码。这使亚马逊能够从您的令牌服务器检索访问令牌。此 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 通用链接是重定向 url。
  • 当用户从我的应用程序(应用程序到应用程序链接)登录 Alexa 时,Alexa 应用程序会将他们重定向到我的应用程序。我的应用是重定向网址。

我尝试使用我的应用程序的 [faux]“通用链接”作为重定向 url,但无济于事。我的登录流程中没有其他重定向。这个网址应该是什么?

注意:我有一个端点用于将 auth_code 交换为 access_token。令牌在正文中返回;没有附加到 redirect_url 的 access_token 的重定向。

示例技能激活(我的 React Native 应用):

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);
    }
}

【问题讨论】:

  • 我也遇到了同样的情况,你能帮我设置 oautj 端点以共享 alexa 文档中定义的用户授权代码吗?

标签: oauth-2.0 alexa alexa-account-linking


【解决方案1】:

我认为不可能同时使用不同的 OAuth 服务器,如 Google 和 Facebook。我不确定是否可以将 firebase 用作 OAuth 服务器。

在技能的帐户链接选项卡中,您必须输入要使用的 OAuth 服务器的详细信息,并且在 accountLinkRequest 中您必须输入 redirectUri您使用此服务器进行 OAuth 登录。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 2023-02-10
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多