我想在F#中創建一個調用Jira REST API來讀取/創建問題的.NET應用程序。在JIRA中使用OAuth在.NET/F中使用REST調用#
我用OpenSSL生成了.pub
和.pem
,並用公鑰創建了Jira中的應用程序鏈接。
下面是簽名的功能,我放在一起(根據掉一些C#代碼,我在博客中找到),這樣得到我最初的令牌響應:
let rsasha1 (signingKey : string) str =
let rsa = new RSACryptoServiceProvider()
rsa.FromXmlString(signingKey)
let shaHashObject = new SHA1Managed()
let data = Encoding.ASCII.GetBytes(str : string)
let hash = shaHashObject.ComputeHash(data)
let signedValue = rsa.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"))
Convert.ToBase64String(signedValue, Base64FormattingOptions.None)
這是我的功能用做ルM(也可從片段在網上找到)
/// Request a token and return:
/// oauth_token, oauth_token_secret, oauth_callback_confirmed
let requestToken() =
let queryParameters =
["oauth_callback", "oob"
"oauth_consumer_key", consumerKey
"oauth_nonce", System.Guid.NewGuid().ToString().Substring(24)
"oauth_signature_method", "RSA-SHA1"
"oauth_timestamp", currentUnixTime().ToString()
"oauth_version", "1.0"]
let signingString = baseString "POST" requestTokenURI queryParameters
let rsaSignature = rsasha1 consumerSecretXML signingString
let realQueryParameters = ("oauth_signature", rsaSignature)::queryParameters
let req = WebRequest.Create(requestTokenURI, Method="POST")
let headerValue = createAuthorizeHeader realQueryParameters
req.Headers.Add(HttpRequestHeader.Authorization, headerValue)
let resp = req.GetResponse()
let stream = resp.GetResponseStream()
let txt = (new StreamReader(stream)).ReadToEnd()
let parts = txt.Split('&')
(parts.[0].Split('=').[1],
parts.[1].Split('=').[1],
parts.[2].Split('=').[1] = "true")
成功返回令牌信息,但我不能確定下一步該怎麼做,一旦我有令牌。我基於此的原始C#代碼使用的是HMACSHA1而不是RSASHA1,並簡單地將消費者密鑰與令牌密鑰連接起來,然後再次調用簽名函數。
我無法得到這個工作方式。我必須將.pem
文件中的私鑰轉換爲XML,才能將其讀入RSACryptoServiceProvider。如果在轉換之前嘗試將令牌密鑰連接到私鑰上,則會出現錯誤。
我該如何去簽署令牌密鑰,以便我可以對Jira進行後續REST調用?
在請求中使用會話cookie現在您已經創建了一個會話,這只是在隨後對服務器的所有請求中設置cookie的問題。 將會話對象存儲在客戶端上。你這樣做的方式取決於你的客戶如何實現。 當您想要提出請求時,請從會話中獲取cookie名稱和值,並使用它們在請求的標題中設置「cookie」字段。您可以在下面看到一個示例: 標題:{cookie:JSESSIONID = 6E3487971234567896704A9EB4AE501F} –
Sergey Tihon推薦[推特](https://twitter.com/sergey_tihon/status/788240599686213633):[Atlassian.SDK]( https://www.nuget.org/packages/Atlassian.SDK/)。 –