Oauth InvalidTokenException:未经授权-401

Oauth InvalidTokenException:未经授权-401,oauth,intuit-partner-platform,Oauth,Intuit Partner Platform,我正在将应用程序转换为使用IPP.NETAPIv3。我已经构建了所有OAuth并保存了令牌信息。正在尝试建立连接,但总是出现错误。我已经检查并重新检查了所有令牌数据,它看起来是正确的。我哪里出错了?我使用的是NuGet为OAuth和Intuit.Ipp定义的版本(IPPAPIV3)。我正在使用我的测试客户令牌信息,但注意到基本URL(来自IPP库)是。那还能用吗 Dim accessToken As String = QBOE.GetOAuthItem(Profile.Commo

我正在将应用程序转换为使用IPP.NETAPIv3。我已经构建了所有OAuth并保存了令牌信息。正在尝试建立连接,但总是出现错误。我已经检查并重新检查了所有令牌数据,它看起来是正确的。我哪里出错了?我使用的是NuGet为OAuth和Intuit.Ipp定义的版本(IPPAPIV3)。我正在使用我的测试客户令牌信息,但注意到基本URL(来自IPP库)是。那还能用吗

        Dim accessToken As String = QBOE.GetOAuthItem(Profile.Common.StoreNum, "accessToken")
    Dim accessTokenSecret As String = QBOE.GetOAuthItem(Profile.Common.StoreNum, "accessTokenSecret")
    Dim consumerKey As String = ConfigurationManager.AppSettings("consumerKey")
    Dim consumerSecret As String = ConfigurationManager.AppSettings("consumerSecret")
    Dim oauthValidator As OAuthRequestValidator = New OAuthRequestValidator(accessToken, accessTokenSecret, consumerKey, consumerSecret)

    Dim CompanyID As String = QBOE.GetOAuthItem(Profile.Common.StoreNum, "CompanyID")
    Dim appToken As String = ConfigurationManager.AppSettings("applicationToken")
    Dim context As ServiceContext = New ServiceContext(appToken, CompanyID, IntuitServicesType.QBO, oauthValidator)

    Dim service As DataService = New DataService(context)

    Dim customer As Customer = New Customer()
    'Mandatory Fields
    customer.GivenName = "Mary"
    customer.Title = "Ms."
    customer.MiddleName = "Jayne"
    customer.FamilyName = "Cooper"

    Dim resultCustomer As Customer = TryCast(service.Add(customer), Customer)
错误消息(service.Add上的错误) 用户代码未处理Intuit.Ipp.Exception.InvalidTokenException

我检查了fiddler2中的调用,发现对我的OAuth的调用是通过workplace.intuit.com:443进行的,但是IPP调用是通过quickbooks.api.intuit.com:443进行的。我还注意到fiddler2列出了IPP调用,结果是200。输出如下所示

标题文字: 连接quickbooks.api.intuit.com:443http/1.1 主持人:quickbooks.api.intuit.com 代理连接:保持活动状态

发送的数据表示SSLv3兼容的ClientHello握手。为方便起见,数据摘录如下

主要版本:3 小版本:1 随机:53 2E 7C 6E A1 F4 02 4D 9D CF 60 C8 22 CA BC E8 67 6E D8 52 88 54 6F E7 D9 29 52 58 5C 2F 2E 52 课程ID:9E 01 CB DB D6 C8 78 8D D0 E9 A6 5F 02 1E 2C 6D 5D 69 34 FE FD 3E A5 52 EE 19 07 E7 D9 D6 E5 30 密码: [002F]TLS_RSA_AES_128_SHA [0035]TLS_RSA_AES_256_SHA [0005]SSL\u RSA\u与\u RC4\u 128\u SHA [000A]SSL\u RSA\u与\u 3DES\u EDE\u SHA [C013]TLS1_CK_ECDHE_RSA_与_AES_128_CBC_SHA [C014]TLS1_CK_ECDHE_RSA_与_AES_256_CBC_SHA [C009]TLS1_CK_ECDHE_ECDSA_与_AES_128_CBC_SHA [C00A]TLS1_CK_ECDHE_ECDSA_与_AES_256_CBC_SHA [0032]TLS_DHE_DSS_与_AES_128_SHA [0038]TLS_DHE_DSS_与_AES_256_SHA [0013]SSL_DHE_DSS_与_3DES_EDE_SHA [0004]SSL\u RSA\u与\u RC4\u 128\u MD5

答复文本: 已建立HTTP/1.1 200盲连接 FiddlerGateway:直接 开始时间:01:17:18.298 完时间:01:17:18.536

这是一个连接隧道,加密的HTTPS流量通过它流动。要查看此隧道内的加密会话,请确保选中“工具”>“Fiddler选项”>“HTTPS”>“解密HTTPS流量”选项

发送的数据表示与SSLv3兼容的ServerHello握手。为方便起见,数据摘录如下

主要版本:3 小版本:1 课程ID:9E 01 CB DB D6 C8 78 8D D0 E9 A6 5F 02 1E 2C 6D 5D 69 34 FE FD 3E A5 52 EE 19 07 E7 D9 D6 E5 30 随机:63 E2 D0 B1 09 45 E0 28 A4 3B 0B C2 E8 5F 08 F0 D5 F5 8E A7 47 D4 10 E2 D4 D7 5B C4 74 0B 4B E2
Cipher:0x05

您可以使用IPP提供的.net devkit尝试以下文档中提到的调用

401明确表示您的OAuth令牌/请求头不正确。 要对此进行调试,可以使用任何标准的RestClient(如Mozilla browser或Fiddler的RestClient插件),其中可以设置四个OAuth令牌[消费者密钥、消费者机密、访问密钥和访问令牌]和内容类型[应用程序/xml]

  • URI:/customer
  • 方法:邮寄
  • 内容类型:application/xml
Mozilla RestClient-

设置OAuth令牌

设置内容类型(在标题中)

如果上述方法有效,这意味着您的OAuth令牌很好。您需要检查并使用devdefined正确构造标头

如果它不起作用,那么您需要使用IPP OAuth生成一组新的访问令牌和密码


谢谢

谢谢你的快速回复。这是一份文档(你链接的文档,我从中构建此文档),我已经安装了用于firefox的RestClient插件,因此将尝试你的建议。我还用Fiddler的一些发现更新了这篇文章(请查看这是否会影响你的建议)。我从所有OAuth呼叫中获得有效回复并将其保存。我还多次清除和重置(使用我的程序OAuth进程和Intuit游乐场中)“我从所有OAuth呼叫中获得有效回复并将其保存。”-这意味着一切都准备就绪了吗?Mozilla RestClient在这里工作得很好。请让我知道它是如何运行的,只在OAuth端(我在那里进行回调以设置新的身份验证)。我不明白的一点是…如果我了解IPP SDK,它会为我处理很多事情(比如标题中的OAuth_签名)。我如何使用firefox插件在我的RestClient测试调用中获得它?我已经添加了3个快照。请看一看。ThanksI返回并在开始时按照您的指示进行操作,并浏览了游乐场设置。它创建的customerkey和ConsumerCret与“我的应用程序->管理应用程序”屏幕上显示的内容不同(仍然没有在那里更改它们)。无论如何,我在我的web.config中更改了它们,现在一切都正常了。猜测customerKey和Secret不知怎的被更改了,但从未在屏幕上更新。谢谢你的帮助,我已经为此奋斗了三天,但至少我学到了很多。