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

时间:2018-05-25 10:14:40

标签: auth0 actions-on-google dialogflow

我想用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 Linking Actions on Google Auth0设置Int3,如以下帖子所述:

因此,现在我在对话过程中询问用户在手机上使用Google智能助理"您要登录吗?"然后用户回复"是的,我想登录"触发{ "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" } } } } 。在这种情况下,从我的后端通过webhook我发送以下json:

LOG IN WITH GOOGLE

然后,这会使以下窗口显示在用户的屏幕上:Log in window

所以我按Sorry, something went wrong. Please try again later并选择我的一个Gmail帐户继续进行。但是,我在Google智能助理上收到以下错误:{ "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" }

并且我在后端获得了以下json作为回复:

"status": "ERROR"

返回SignInValue的{​​{1}}。

Auth0 logs部分,此登录尝试被描述为成功但交换被描述为失败: enter image description here 此特定失败交换的特定日志包含以下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": "****************"
}

其中feacft代表Failed to exchange authorization code for Access Token的{​​{1}}。

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

  1. 我手动转到Auth0 - > Auth0 - > Connections - > Social - > Google
  2. 我选择与上述相同的Gmail帐户
  3. 我在此页面按TRY"This is not verified"
  4. Go to auth0.com (unsafe)
  5. 我终于得到了这个:"It works!"

    allow auth0.com to access my Google Account日志部分,我终于得到了Auth0

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

    Success Exchange

    但请注意,在后一种情况下({ "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": "*****************" } ),Success Exchange与前一种情况(client_id)不同。在Failed Exchange案例中,Failed Exchange是我创建的client_id应用程序之一,但在Auth0我不知道这是Success Exchange的内容。也许它是内部安装client_id的{​​{1}},用于测试client_id与其他客户(Google,Facebook等)之间的连接。

    如何通过Google智能助理成功登录并获取Auth0的{​​{1}}?

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

    我发现有两条帖子报告了我遇到的错误Auth0"status": "OK"错误):

    - 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

    他们都报告说他们将SignInValue个应用更改为Auth0(例如来自feacft)并且错误已修复。但是,我测试了这个,到目前为止它对我不起作用。

2 个答案:

答案 0 :(得分:2)

"失败的交易所"日志及其详细日志条目似乎表明问题出在Google尝试将Auth Code替换为访问/刷新令牌时。 (我意识到这实际上是什么" feacft"意思是,我只是重复它。)Google和Auth0似乎都意识到这是失败的。

调试的第一步是确保客户端ID Client Secret 在两个服务之间设置完全相同。这些将由Auth0服务器决定。

Action Console中“帐户关联”页面上的某些配置最近也发生了变化,您链接到的文档可能还没有反映出来。确保您已选择"不,我只想在我的网站上创建帐户"用于创建帐户和" OAuth" (" OAuth& Google登录")和"授权代码"用于链接类型。

enter image description here

您可能还希望validate the server反对Google的OAuth实施,但这似乎不太可能,因为您使用的是Auth0。

答案 1 :(得分:2)

最后我解决了这个问题,尽管我并不完全知道为什么这个问题已得到解决,所以对我的回答有任何额外的解释是值得欢迎的。请写下面的评论。

Auth0 Applications小组现在看起来像这样:

enter image description here

到目前为止,我使用Auth0 Management API (Test Application)应用程序及其在Google上的操作上的凭据来执行上述帖子中描述的任务。 我正在尝试修改此应用程序的一些设置和配置细节,但我仍然遇到了同样的错误。

然后,我想到了创建一个新的应用程序。我的新应用程序(NewNew2)在手机上的Google智能助理上运行良好。

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