【问题标题】:Cannot get past 401 error OAuth with Desk.com使用 Desk.com 无法通过 401 错误 OAuth
【发布时间】:2013-02-04 05:18:28
【问题描述】:

我已经为此工作了好几天,试图让这个身份验证与 Desk.com 的 API http://dev.desk.com/ 一起工作。我什至尝试过使用诸如https://github.com/buildmaster/oauth-mvc.net#readme 之类的框架,但我仍然收到 401 错误...我永远无法验证。

我不能再因为这不起作用..并且已经花了几天时间..这是我在这里的所有自定义代码,我一直在绞尽脑汁想弄清楚为什么 Desk.com正在拒绝我第一次尝试在这里向他们发出 API 调用。

Desk.com 说它必须是我的签名,但我一遍又一遍地检查我的签名,我觉得签名不是问题。我什至尝试使用 oauth-mvc.net 并使用他们的实用程序来创建我的签名 (https://github.com/buildmaster/oauth-mvc.net#readme),当使用该框架创建 sig 时,我仍然得到 401。所以我不能确定它是签名,在我如何形成请求时它一定是一些简单的愚蠢......我不确定。

所以这是我的代码..我一辈子都看不出有什么问题。跟着它走,就好像你在跟我调试一样。 (仅供参考,如果您看不到它,请右键单击图像并选择查看以查看完整图片)。

1_UnitTestStart.jpg 2_AboutToCreateSignature.jpg 2_AboutToCreateSignature_2.jpg 3_AboutToCreateSignatureBase.jpg 4_AboutToEncodeEachKeyAndValue.jpg 6_AboutToSortEncodedParamList.jpg 7_ParamListIsSorted.jpg 8_AboutToNormalizeTheSortedParamList.jpg 9_SortedParamListIsNowNormalized.jpg 10_ShowingMyUrlEncodeMethodHere.jpg 11_BaseSignatureStringCreated.jpg 12_SigningTheHMACSHA1.jpg 13_ConvertingToHash.jpg 14_Hashed.jpg 15_ReturnFinalSignature.jpg 16_AboutToGetAuthHeaderParamsNormalizedForRequestHeader.jpg 16_AboutToGetAuthHeaderParamsNormalizedForRequestHeader_2.jpg 17_ParamsAreNormalizedForRequestHeader.jpg 18_AboutToSendAPIRequestToGetAllCases.jpg 19_AboutToCreateTheHttpWebRequest.jpg 20_AboutToAddHeadersToRequest.jpg 20_AboutToAddHeadersToRequest_2.jpg 21_AboutToSendTheRequest.jpg 22_ViewOfRequestInfoBeforeSending.jpg 23_Response401Error.jpg 24_Fiddler_RequestDetails.jpg 24_Fiddler_RequestDetails_2.jpg 24_Fiddler_RequestDetails_3.jpg 24_Fiddler_RequestDetails_4.jpg

【问题讨论】:

  • 什么鬼?谁投票结束了这个以及为什么
  • 我认为不应该关闭它。但在我看来,由于图像的原因,这不是一个写得很好的问题。就目前而言,它们不可读(好吧,你可以放大,但我认为人们不会打扰)
  • 是的,事情是这样的,我必须写太多,而图片会加快速度,在这种情况下更清楚。 OAuth 很复杂……所以这不是我想讨论的内容,我想展示不起作用的代码。
  • 这就像你提供的信息太少或太多。我认为在这个复杂的案例中拥有代码的屏幕截图将是一个助手的梦想。
  • 在调试无效签名时,我们只需要三件事。您的签名库、用于 hmac 签名的代码以及请求/响应的提琴手的输出。我建议使用该格式清理这个问题。

标签: c# oauth


【解决方案1】:

99% 的情况下,无效签名意味着您的签名基本字符串存在问题。让您的代码始终记录此值,因为您将在某些时候需要...

看起来您的基本签名字符串不包含 oauth_version 参数。您的签名库应包含所有以 oauth_ 开头的参数和任何查询字符串参数(但看起来您在 qs 中没有发送任何内容)。

【讨论】:

  • 我实际上已经尝试在版本中添加 backin,但没有运气。对于这个电话,我正在执行一个 GET 来获取客户或案例的列表......像这样的东西......只是得到一堆记录。对于此 API,不需要执行此操作的参数。我只是点击了 resourceName.json 端点......所以这就是我没有查询字符串的原因。此外,我正在使用 HttpRequestHeader 发送东西,即使我必须发送数据,我也不想走使用查询字符串的路线。只是建议使用标题而不是查询字符串,对我来说它也更干净。
【解决方案2】:

这是一个相当晚的答案,但如果其他人遇到问题,它可能会有所帮助。

您可以使用 RestSharp 来简化对 desk.com API 的使用。一开始我在让 OAuth 工作时遇到了一些问题,但是在将 RestSharp 添加到项目中之后,事情变得简单多了。为此,我整理了一个小型 SDK。还远未完成,但您可以获取源代码并查看连接是如何建立的:

http://danielsaidi.github.com/desk-csharp-sdk/

【讨论】:

    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2014-06-01
    • 2011-02-06
    • 2016-03-15
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多