【问题标题】:GET Requests fails with 401 Unauthorized Error when the url has query parameters当 url 具有查询参数时,GET 请求失败并出现 401 Unauthorized Error
【发布时间】:2021-06-13 21:37:33
【问题描述】:

我正在使用 Oauth 1.0a 在 C# 中对 Jira 进行 Rest API 调用。到目前为止,我已经能够获取访问令牌并使用此令牌进行 API 调用来获取项目、发布、创建票证和添加附件,而没有任何问题。

当我在 URL 中有一些查询参数时遇到问题,我收到响应 oauth_problem="signature_invalid"

"{WWW-认证:OAuth 领域="https%3A%2F%2Fxxxx-stage.dummy.com%2Fjira", OAuth realm="https%3A%2F%2Fxxxx-stage.dummy.com%2Fjira", oauth_problem="signature_invalid", oauth_signature="fxrHjNmz3C0gPClh667xKO93fU9PI%2FFAy2o%2B0tA98oso3d%2FiHF957LnMJdKWdmN1w6lJIgEYA5WLpvRuv65IIgAVeSWQWyyE2iqKY5NKpVe8w9lNKJpp6jVX3OzUfhZFsUmNcfwmrfEzDfq0DFKHbDltA9KX51daMWfE5bOxUwA%3D", oauth_signature_base_string="GET%26https%253A%252F%252Fxxxx-stage.dummy.com%252Fjira%252Frest%252Fapi%252F2%252Fissue%252Fcreatemeta%26oauth_callback%253Doob%2526oauth_consumer_key%253DOauthKey-elite%2526oauth_nonce%253D161227630350881010%2526oauth_signature_method%253DRSA-SHA1 %2526oauth_timestamp%253D1612276303%2526oauth_token%253DIuXbcYTqh5kAIbirTWg7zqzJhVITFHny%2526oauth_version%253D1.0", oauth_signature_method="RSA-SHA1"

日期:2021 年 2 月 2 日星期二 14:34:19 GMT 最大年龄=16000000;包括子域;预加载 X-XSS 保护: 1;mode=block Referrer-Policy: strict-origin-when-cross-origin
X-Content-Type-Options:nosniff X-Frame-Options:SAMEORIGIN
内容安全策略:框架祖先“自我”
X-Permitted-Cross-Domain-Policies:无 X-Download-Options:noopen
内容类型:application/x-www-form-urlencoded;字符集=UTF-8
内容长度:654 }

实际网址是“https://xxxx-stage.dummy.com/jira/rest/api/2/issue/createmeta?projectKeys=Elite&issueTypeNames=Task&expand=projects.issuetypes.fields”

在对 url 和参数进行排序和编码后,我得到了以下字符串,我正在使用 RSA-SHA1 进行签名。

GET&https%3A%2F%2Fxxxx-stage.dummy.com%2Fjira%2Frest%2Fapi%2F2%2Fissue%2Fcreatemeta&expand%3Dprojects.issuetypes.fields%26issueTypeNames%3DTask%26projectKeys%3DSciFiProject%26oauth_callback%3Doob%26oauth_consumer_key%3DOauthKey -elite%26oauth_nonce%3D161227476865431774%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D1612274768%26oauth_token%xxxxcYTqh5kAIbirTWg7zqzJhVITFHny%26oauth_version%3D1.0

并且查询参数不会添加到 Authorization 标头中。它只有 OAuth 参数。

另外,我注意到在编码的 URL 中,“GET”方法名称和 URL 用“&”分隔。第一个参数“expand”和 URL 的结尾“createmeta”用“&”分隔,但后面的其他参数包括 OAuth 参数是 URL 编码的。奇怪的是,这适用于没有查询参数的其他 URL。

这里已经回答了GET fails with 401 (Unauthorized) when query parameter is involved due to invalid OAuth signature,我已经尝试执行那里提到的步骤,但我想我可能会遗漏一些东西。

谁能指导我哪里出错了?

【问题讨论】:

    标签: oauth jira-rest-api http-status-code-401


    【解决方案1】:

    我能够自己找出问题所在。问题在于 SignatureBaseString 的形成方式。必须对参数进行排序,然后对其进行编码。所以在我的情况下,问题在于突出显示的参数。

    GET&https%3A%2F%2Fxxxx-stage.dummy.com%2Fjira%2Frest%2Fapi%2F2%2Fissue%2Fcreatemeta&expand%3Dprojects.issuetypes.fields%26issueTypeNames%3DTask%26projectKeys%3DSciFiProject %26oauth_callback%3Doob%26oauth_consumer_key%3DOauthKey-elite%26oauth_nonce%3D161227476865431774%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D1612274768%26oauth_token%xxxxcYTqh5kAIbirTWg7zqzJhVITFHny%26oauth_version%3D1.0

    突出显示的参数应该位于编码字符串的末尾。所以基本上解决方案是按升序对参数进行排序,用“&”分隔每个参数,然后对参数字符串进行URL编码。如果两个参数具有相同的名称,则根据它们的值对它们进行排序。

    GET&https%3A%2F%2Fxxxx-stage.dummy.com%2Fjira%2Frest%2Fapi%2F2%2Fissue%2Fcreatemeta&expand%3Dprojects.issuetypes.fields%26issueTypeNames%3DTask%26oauth_callback%3Doob%26oauth_consumer_key%3DOauthKey-elite%26oauth_nonce %3D161228695355767297%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D1612286953%26oauth_token%3xcxccYTqh5kAIbirTWg7zqzJhVITFHny%26oauth_version%3D1.0%26projectKeys%3plite

    可以在此处找到有关参数编码的更多信息。 https://oauth.net/core/1.0/#encoding_parameters

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2014-12-02
      • 1970-01-01
      相关资源
      最近更新 更多