【问题标题】:Unify Circuit OAuth2 - Why does Body return empty [] from REST API requests?统一电路 OAuth2 - 为什么正文从 REST API 请求返回空 []?
【发布时间】:2019-06-25 04:06:38
【问题描述】:

当我使用我的 oauth 2.0 的令牌尝试 REST API 时,我不断在正文下返回空结果 [],并且标头中有 OK-200 状态代码。

我创建了一个机器人并使用 curl + 基本身份验证以及 swagger 测试了其余 API,它们工作正常。我使用带有 swagger 令牌的 oauth 2.0 测试了我的 curl 命令,这也可以正常工作。

我尝试了不同的设置来测试,但要坚持一个基础:

  • 我在自定义应用程序下创建了一个 Bot,范围为“全部”选择​​,TTL 为“永久”。

  • 我通过 REST 成功请求并接收了我的令牌,其范围如下:'READ_USER_PROFILE,WRITE_USER_PROFILE,READ_CONVERSATIONS,WRITE_CONVERSATIONS,READ_USER'。

  • 我注意到 'ALL' 范围不起作用,它返回“invalid_client, The Application null is not enabled for scope ::=[ALL]”,但同一个客户端在没有上述任何范围的情况下工作一起提及或单独提及,“ALL”除外。

  • 我确保我拥有我正在测试的 REST API 的必要范围,例如“/conversations”的“READ_CONVERSATIONS”

  • 我没有收到任何 401 或其他错误代码,只有 200 个。

  • 我用 swagger 生成的令牌测试了相同的命令,结果返回正文字符串(换句话说,这个令牌有效)

  • 我已经用 Postman 和 PowerShell 的 Invoke-WebRequest/Invoke-RestMethod 复制了同样的问题。

  • 不确定是否相关,但我注意到 Web 应用程序中不再存在“OAuth 应用程序”选项:“管理”>“OAuth 应用程序”下的 webclient。 “OAuth 应用”选项卡,在“设置”>“电路实验室”中启用“OAuth 应用”。

\\Requesting token:
curl -X POST https://circuitsandbox.net/oauth/token -d "client_id=myclientidhere&client_secret=myclientsecrethere&grant_type=client_credentials&scope=READ_USER_PROFILE,WRITE_USER_PROFILE,READ_CONVERSATIONS,WRITE_CONVERSATIONS,READ_USER" -i

{"access_token":"myaccesstokenhere","token_type":"Bearer","scope":["READ_USER_PROFILE","WRITE_USER_PROFILE","READ_CONVERSATIONS","WRITE_CONVERSATIONS","READ_USER"]}

\\Making request:
curl -i "https://circuitsandbox.net/rest/v2/conversations" -H "Authorization: Bearer myaccesstokenhere" -i
[]
\\\Full sample (-i parameter):
\\Requesting token:
curl -X POST https://circuitsandbox.net/oauth/token -d "client_id=myclientidhere&client_secret=myclientsecrethere&grant_type=client_credentials&scope=READ_USER_PROFILE,WRITE_USER_PROFILE,READ_CONVERSATIONS,WRITE_CONVERSATIONS,READ_USER" -i

HTTP/1.1 200 OK
Date: Sat, 22 Jun 2019 01:21:43 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 179
Connection: keep-alive
access-control-allow-origin: *
access-control-allow-credentials: true
access-control-allow-methods: GET, POST, DELETE, PUT, PATCH, OPTIONS
access-control-allow-headers: Accept, Accept-Language, User-Agent, Origin, Connection, Host, Accept-Encoding, Authorization, Content-Type, api_key, apiKey
ETag: W/"b3-K441G+yOERm+Qhj2E8VpkzO8ISg"
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=157680000; includeSubdomains; preload

{"access_token":"myaccesstokenhere","token_type":"Bearer","scope":["READ_USER_PROFILE","WRITE_USER_PROFILE","READ_CONVERSATIONS","WRITE_CONVERSATIONS","READ_USER"]}

\\Making request:
curl -i "https://circuitsandbox.net/rest/v2/conversations" -H "Authorization: Bearer myaccesstokenhere"

HTTP/1.1 200 OK
Date: Sat, 22 Jun 2019 01:25:37 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 2
Connection: keep-alive
access-control-allow-origin: *
access-control-allow-credentials: true
access-control-allow-methods: GET, POST, DELETE, PUT, PATCH, OPTIONS
access-control-allow-headers: Accept, Accept-Language, User-Agent, Origin, Connection, Host, Accept-Encoding, Authorization, Content-Type, api_key, apiKey
ETag: W/"2-l9Fw4VUO7kr8CvBlt4zaMCqXZ0w"
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=157680000; includeSubdomains; preload

[]

我希望输出包含请求的正文输出,例如

{"type":"COMMUNITY","convId":"5fad5fa4-1097-d66f-083a-3f129214e99f","participants":["5fad5fa4-1097-d66f-083a-3f129214e99f","5fad5fa4-1097-d66f-083a-3f129214e99f","5fad5fa4-1097-d66f-083a-3f129214e99f","5fad5fa4-1097-d66f-083a-3f129214e99f"],"topic":"YourCompany","creationTime":1560992185888,"modificationTime":1561143383261,"creatorId":"5fad5fa4-1097-d66f-083a-3f129214e99f","creatorTenantId":"5fad5fa4-1097-d66f-083a-3f129214e99f","description":"Default open conversation for YourCompanyHere"}

但实际输出的是:[ ]

【问题讨论】:

    标签: rest oauth-2.0 circuit-sdk


    【解决方案1】:

    刚刚测试过,我得到了返回的对话(和社区)。这不会返回你的对话,而是机器人所属的对话。确保机器人是对话的成员。

    【讨论】:

    • 嗨罗杰,谢谢!这很有帮助,但是我只是将机器人添加到对话中并没有立即起作用,仍然得到空白,这就是为什么我对沙盒和机器人使用相同的电子邮件的原因。我将在下面的评论中详细说明。
    【解决方案2】:

    正如上面的回复中提到的,这是我遗漏的部分内容,即使将机器人添加到对话中,我仍然会得到空白。我还遇到了各种奇怪的问题,例如尝试将旧机器人添加到新对话等时收到错误。原因是因为我为我的电路沙箱帐户和机器人使用了相同的电子邮件地址,所以这可能会造成冲突。简而言之,这对我有用:

    1.使用与我的沙盒帐户不同的电子邮件地址创建了新机器人(即使是伪造的电子邮件也可以)

    2。通过电子邮件地址将机器人添加到对话中(机器人名称没有拉出来) - 谢谢@Roger

    3.运行相同的命令来创建令牌并使用 API,这次它成功了!

    帮助解决问题,并由同事在不同的沙箱中重现(感谢 Ricky El-Qasem!),并在 postman、curl 和 PowerShell 中进行了测试。

    【讨论】:

    • 应该不可能使用系统中已使用的电子邮件创建机器人。你能解释一下如何在沙盒上为你的用户帐户和机器人管理相同的电子邮件吗?
    • 嗨,罗杰,我只是按照与往常一样的流程,我确实记得遇到了一个错误,我只是移动了选项(这应该没有什么区别),它突然发生了,我试图复制,但我得到了预期的错误(无法创建应用程序),所以我无法复制,上周我也删除了那个机器人,但是我和一个同事在空白处都有同样的问题,我会和他核实回来吧,也许他还没有删除旧机器人。
    猜你喜欢
    • 2016-07-05
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2020-09-02
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多