无法交换访问令牌的授权码(feacft)

Poe*_*dit 5 auth0 actions-on-google dialogflow-es

我想用Dialogflow和Google智能助理以及Google Transactions API创建一个聊天机器人,以便用户订购一些商品.现在我的代理包含以下四个意图:

  • Default Welcome Intent (文字回复:你好,你想买一个巧克力盒吗?)
  • Default Fallback Intent
  • Int3 (培训短语:"是的,我想登录",履行:启用webhook)
  • Int4(事件:actions_intent_SIGN_IN,履行:启用webhook)

我使用Dialogflow Json而不是Node.js将我的代理与Transactions API连接起来.我实现了所有必要的步骤来设置Account LinkingActions on GoogleAuth0作为是在帖子中描述,如下面的:

因此,现在我在对话期间询问用户手机Google智能助理 "你想登录吗?" 然后用户回答"是的,我想登录"哪个触发器Int3.在这种情况下,从我的后端通过webhook我发送以下json:

{
    "payload": {
        "google": {
            "expectUserResponse": true,
            "isSsml": false,
            "noInputPrompts": [],
            "systemIntent": {
                "data": {
                    "@type": "type.googleapis.com/google.actions.v2.SignInValueSpec",
                    "optContext": "To make the order easier"
                },
                "intent": "actions.intent.SIGN_IN"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,这会使以下窗口出现在用户的屏幕上:登录窗口

所以我正在按下LOG IN WITH GOOGLE并选择我的一个Gmail帐户.但是,我在Google智能助理上收到以下错误:Sorry, something went wrong. Please try again later

而且我在后端收到以下json作为回复:

{
    "responseId": "c65ab8d3-f6e9-4e86-9645-6785b01d3f10",
    "queryResult": {
        "queryText": "actions_intent_SIGN_IN",
        "action": "sign_in",
        "parameters": {},
        "allRequiredParamsPresent": true,
        "fulfillmentMessages": [
            {
                "text": {
                    "text": [
                        ""
                    ]
                }
            }
        ],
        "outputContexts": [
            {
                "name": "projects/*********/agent/sessions/1527240031183/contexts/actions_capability_screen_output"
            },
            {
                "name": "projects/*********/agent/sessions/1527240031183/contexts/actions_intent_sign_in",
                "parameters": {
                    "SIGN_IN": {
                        "@type": "type.googleapis.com/google.actions.v2.SignInValue",
                        "status": "ERROR"
                    }
                }
            },
            {
                "name": "projects/*********/agent/sessions/1527240031183/contexts/actions_capability_audio_output"
            },
            {
                "name": "projects/*********/agent/sessions/1527240031183/contexts/actions_capability_web_browser"
            },
            {
                "name": "projects/*********/agent/sessions/1527240031183/contexts/actions_capability_media_response_audio"
            }
        ],
        "intent": {
            "name": "projects/*********/agent/intents/75e0bc57-1829-4efe-9e35-dbcaa3da5a77",
            "displayName": "Sign_in"
        },
        "intentDetectionConfidence": 1,
        "diagnosticInfo": {},
        "languageCode": "en-gb"
    },
    "originalDetectIntentRequest": {
        "source": "google",
        "version": "2",
        "payload": {
            "isInSandbox": true,
            "surface": {
                "capabilities": [
                    {
                        "name": "actions.capability.SCREEN_OUTPUT"
                    },
                    {
                        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
                    },
                    {
                        "name": "actions.capability.WEB_BROWSER"
                    },
                    {
                        "name": "actions.capability.AUDIO_OUTPUT"
                    }
                ]
            },
            "inputs": [
                {
                    "rawInputs": [
                        {}
                    ],
                    "arguments": [
                        {
                            "extension": {
                                "@type": "type.googleapis.com/google.actions.v2.SignInValue",
                                "status": "ERROR"
                            },
                            "name": "SIGN_IN"
                        }
                    ],
                    "intent": "actions.intent.SIGN_IN"
                }
            ],
            "user": {
                "lastSeen": "2018-05-25T09:20:16Z",
                "locale": "en-GB",
                "userId": "*********"
            },
            "conversation": {
                "conversationId": "1527240031183",
                "type": "ACTIVE",
                "conversationToken": "[]"
            },
            "availableSurfaces": [
                {
                    "capabilities": [
                        {
                            "name": "actions.capability.SCREEN_OUTPUT"
                        },
                        {
                            "name": "actions.capability.WEB_BROWSER"
                        },
                        {
                            "name": "actions.capability.AUDIO_OUTPUT"
                        }
                    ]
                }
            ]
        }
    },
    "session": "projects/*********/agent/sessions/1527240031183"
} 
Run Code Online (Sandbox Code Playgroud)

返回"status": "ERROR"SignInValue.

Auth0日志部分,此登录尝试被描述为成功但交换被描述为失败: 在此输入图像描述 此特定失败交换的特定日志包含以下json:

{
  "date": "2018-05-25T09:20:53.786Z",
  "type": "feacft",
  "description": "Unauthorized",
  "connection_id": "",
  "client_id": "Xsr3VFE***********",
  "client_name": null,
  "ip": "66.249.81.44",
  "user_agent": "OpenAuth",
  "hostname": "*********.eu.auth0.com",
  "user_id": "",
  "user_name": "",
  "log_id": "****************"
}
Run Code Online (Sandbox Code Playgroud)

其中feacft代表Failed to exchange authorization code for Access TokenAuth0.

虽然可能无关紧要,但请注意:

  1. 我手动转到Auth0- > Connections- > Social- > Google- >TRY
  2. 我选择与上面相同的Gmail帐户
  3. 我按此Go to auth0.com (unsafe)页面:"这未经验证"
  4. 一世 allow auth0.com to access my Google Account

我终于得到了这个:"它有效!"

Auth0日志部分,我终于得到Success Exchange了这个.

此特定成功交换的特定日志包含以下json:

{
  "date": "2018-05-29T08:14:48.843Z",
  "type": "seacft",
  "description": "",
  "connection_id": "",
  "client_id": "EXOtUb****************",
  "client_name": "N/A",
  "ip": "35.160.3.103",
  "user_agent": "Node-oauth",
  "hostname": "**********.eu.auth0.com",
  "user_id": "",
  "user_name": "",
  "log_id": "*****************"
}
Run Code Online (Sandbox Code Playgroud)

但请注意,在后一种情况下(Success Exchange)client_id,与前一种情况()不同Failed Exchange.在这种Failed Exchange情况下,这client_idAuth0我创建的应用程序之一,但在Success Exchange我不知道这是什么client_id; 也许它是client_id内部安装的Auth0,用于测试Auth0与其他客户(谷歌,Facebook等)之间的连接.

我怎样才能通过谷歌助理登录成功,并得到"status": "OK"SignInValue

到目前为止我做错了什么?

我发现有两个帖子报告了我遇到的错误Auth0(feacft错误):

- https://community.auth0.com/t/uwp-application-triggers-a-feacft-error-log-event-when-using-google-facebook-authentication/6394

- https://github.com/auth0/react-native-auth0/issues/62

他们都报告说他们将Auth0应用程序更改为Native(例如从Machine to Machine)并且错误已修复.但是,我测试了这个,到目前为止它对我不起作用.

Poe*_*dit 2

最后我解决了这个问题,尽管我不太清楚为什么会解决这个问题,所以欢迎对我的答案进行任何额外的解释。请写在下面的评论中。

Auth0面板上Applications现在看起来像这样:

在此输入图像描述

到目前为止,我正在使用该Auth0 Management API (Test Application)应用程序及其在 Actions on Google 上的凭据来完成我上面的帖子中描述的任务。我正在尝试修改此应用程序的一些设置和配置详细信息,但仍然遇到相同的错误。

然后,我想到简单地创建一个新应用程序。我的两个新应用程序 ( NewNew2) 在手机上的 Google Assistant 上运行良好。

请记住,据我所知,在应用程序Auth0 Management API (Test Application)和应用程序之间New2,所有配置详细信息和设置都是相同的,因此我不知道为什么后者对我有用而前者对我不起作用。我怀疑前者是一个测试应用程序,因此它的用途非常有限,但我认为它适用于我的项目。