无法交换访问令牌的授权代码 (feacft)
Failed to exchange authorization code for Access Token (feacft)
我想使用 Dialogflow 和 Google 助手以及 Google 事务 API 创建一个聊天机器人,以使用户能够订购一些商品。现在我的代理包含以下四个意图:
Default Welcome Intent
(文字回复:您好,请问您要买巧克力盒吗?)
Default Fallback Intent
Int3
(训练短语:"Yes, I want to sign in",实现:启用 webhook)
Int4
(事件:actions_intent_SIGN_IN
,实现:已启用 webhook)
我正在使用 Dialogflow Json 而不是 Node.js 将我的代理与事务连接 API。我实施了所有必需的步骤,以使用 Auth0
为 Actions on Google
设置 Account Linking
,如以下帖子中所述:
https://productforums.google.com/forum/#!topic/dialogflow/omr_2iZXLxw;context-place=forum/dialogflow
https://www.jovo.tech/blog/google-action-account-linking-auth0/
因此,现在我在手机 phone Google Assistant 通话期间 "Do you want to sign in?" 询问用户 ,然后是用户 "Do you want to sign in?"响应 "Yes, I want to sign in" 触发 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"
}
}
}
}
然后这使得以下 window 出现在用户的屏幕上:Log in window
所以我按 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"
}
其中 returns "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": "****************"
}
其中 feacft
代表 Failed to exchange authorization code for Access Token
在 Auth0
。
尽管可能无关紧要,但请注意,当:
- 我手动去
Auth0
-> Connections
-> Social
-> Google
-> TRY
- 我选择与上面相同的 Gmail 帐户
- 我在这个页面按
Go to auth0.com (unsafe)
:"This is not verified"
- 我
allow auth0.com to access my Google Account
我终于明白了:"It works!"
在 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": "*****************"
}
但是请注意,在后一种情况 (Success Exchange
) 中,client_id
与前一种情况 (Failed Exchange
) 不同。在 Failed Exchange
的情况下,client_id
是我创建的 Auth0
应用程序之一,但在 Success Exchange
的情况下,我不知道这是什么 client_id
;也许是内部安装的 Auth0
的 client_id
用于测试 Auth0
和其他客户端(Google、Facebook 等)之间的连接。
如何通过Google助手成功登录并获得SignInValue
的"status": "OK"
?
到目前为止我做错了什么吗?
我发现有两个帖子报告了我在 Auth0
上遇到的错误(feacft
错误):
- https://github.com/auth0/react-native-auth0/issues/62
他们都报告说他们将 Auth0
应用程序更改为 Native
(例如从 Machine to Machine
)并且错误已修复。但是,我对此进行了测试,但到目前为止它对我不起作用。
"Failed Exchange" 日志及其详细的日志条目似乎表明问题出在 Google 试图用授权代码交换 Access/Refresh 令牌。 (我意识到这就是 "feacft" 的字面意思,我只是重复一遍。)Google 和 Auth0 似乎都意识到这是失败的。
调试的第一步是确保 Client ID 和 Client Secret 在两者之间的设置完全相同服务。这些将由 Auth0 服务器决定。
Action Console 中帐户链接页面上的一些配置最近也发生了变化,您链接到的文档可能还没有反映出来。确保您已选择 "No, I only want to allow account creation on my website" 作为帐户创建和 "OAuth"( 而不是 "OAuth & Google Sign In")和 "Authorization code" 作为链接类型。
您可能还希望 validate the server 反对 Google 的 OAuth 实施,尽管这似乎不太可能,因为您使用的是 Auth0。
最后我解决了这个问题,尽管我并不真正确切地知道为什么这个问题是固定的,所以欢迎对我的回答进行任何额外的解释。请在下方留言。
在 Auth0
上,Applications
面板现在看起来像这样:
到目前为止,我正在使用 Auth0 Management API (Test Application)
应用程序及其在 Google 上的操作上的凭据来完成上面 post 中描述的任务。
我正在通过修改此应用程序的一些设置和配置细节进行试验,但我仍然遇到相同的错误。
然后,我想到了简单地创建一个新的应用程序。我的两个新应用程序(New
、New2
)在 Google 手机 phone 上的智能助理上运行良好 phone。
请记住,在 Auth0 Management API (Test Application)
和 New2
应用程序之间,所有配置细节和设置,据我所知,都是相同的,所以我不知道为什么后者为我工作而前者没有。我怀疑前者是一个测试应用程序,所以它的用途非常有限,但我认为它会为我的项目工作。
我想使用 Dialogflow 和 Google 助手以及 Google 事务 API 创建一个聊天机器人,以使用户能够订购一些商品。现在我的代理包含以下四个意图:
Default Welcome Intent
(文字回复:您好,请问您要买巧克力盒吗?)Default Fallback Intent
Int3
(训练短语:"Yes, I want to sign in",实现:启用 webhook)Int4
(事件:actions_intent_SIGN_IN
,实现:已启用 webhook)
我正在使用 Dialogflow Json 而不是 Node.js 将我的代理与事务连接 API。我实施了所有必需的步骤,以使用 Auth0
为 Actions on Google
设置 Account Linking
,如以下帖子中所述:
https://productforums.google.com/forum/#!topic/dialogflow/omr_2iZXLxw;context-place=forum/dialogflow
https://www.jovo.tech/blog/google-action-account-linking-auth0/
因此,现在我在手机 phone Google Assistant 通话期间 "Do you want to sign in?" 询问用户 ,然后是用户 "Do you want to sign in?"响应 "Yes, I want to sign in" 触发 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"
}
}
}
}
然后这使得以下 window 出现在用户的屏幕上:Log in window
所以我按 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"
}
其中 returns "status": "ERROR"
为 SignInValue
.
在 Auth0
日志部分,此登录尝试被描述为成功,但交换被描述为失败:
{
"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
在 Auth0
。
尽管可能无关紧要,但请注意,当:
- 我手动去
Auth0
->Connections
->Social
->Google
->TRY
- 我选择与上面相同的 Gmail 帐户
- 我在这个页面按
Go to auth0.com (unsafe)
:"This is not verified" - 我
allow auth0.com to access my Google Account
我终于明白了:"It works!"
在 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": "*****************"
}
但是请注意,在后一种情况 (Success Exchange
) 中,client_id
与前一种情况 (Failed Exchange
) 不同。在 Failed Exchange
的情况下,client_id
是我创建的 Auth0
应用程序之一,但在 Success Exchange
的情况下,我不知道这是什么 client_id
;也许是内部安装的 Auth0
的 client_id
用于测试 Auth0
和其他客户端(Google、Facebook 等)之间的连接。
如何通过Google助手成功登录并获得SignInValue
的"status": "OK"
?
到目前为止我做错了什么吗?
我发现有两个帖子报告了我在 Auth0
上遇到的错误(feacft
错误):
- https://github.com/auth0/react-native-auth0/issues/62
他们都报告说他们将 Auth0
应用程序更改为 Native
(例如从 Machine to Machine
)并且错误已修复。但是,我对此进行了测试,但到目前为止它对我不起作用。
"Failed Exchange" 日志及其详细的日志条目似乎表明问题出在 Google 试图用授权代码交换 Access/Refresh 令牌。 (我意识到这就是 "feacft" 的字面意思,我只是重复一遍。)Google 和 Auth0 似乎都意识到这是失败的。
调试的第一步是确保 Client ID 和 Client Secret 在两者之间的设置完全相同服务。这些将由 Auth0 服务器决定。
Action Console 中帐户链接页面上的一些配置最近也发生了变化,您链接到的文档可能还没有反映出来。确保您已选择 "No, I only want to allow account creation on my website" 作为帐户创建和 "OAuth"( 而不是 "OAuth & Google Sign In")和 "Authorization code" 作为链接类型。
您可能还希望 validate the server 反对 Google 的 OAuth 实施,尽管这似乎不太可能,因为您使用的是 Auth0。
最后我解决了这个问题,尽管我并不真正确切地知道为什么这个问题是固定的,所以欢迎对我的回答进行任何额外的解释。请在下方留言。
在 Auth0
上,Applications
面板现在看起来像这样:
到目前为止,我正在使用 Auth0 Management API (Test Application)
应用程序及其在 Google 上的操作上的凭据来完成上面 post 中描述的任务。
我正在通过修改此应用程序的一些设置和配置细节进行试验,但我仍然遇到相同的错误。
然后,我想到了简单地创建一个新的应用程序。我的两个新应用程序(New
、New2
)在 Google 手机 phone 上的智能助理上运行良好 phone。
请记住,在 Auth0 Management API (Test Application)
和 New2
应用程序之间,所有配置细节和设置,据我所知,都是相同的,所以我不知道为什么后者为我工作而前者没有。我怀疑前者是一个测试应用程序,所以它的用途非常有限,但我认为它会为我的项目工作。