【发布时间】: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