問題を読み書きするためにJira REST APIを呼び出すF#で.NETアプリケーションを作成しようとしています。.NET/FでJira REST呼び出しでOAuthを使用する#
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)
そして、これは私が「関数であります(また、オンラインスニペットから見つかっ)コール
/// 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#コードでは、RSASHA1の代わりにHMACSHA1を使用していましたが、コンシューマーシークレットとトークンシークレットを連結してから、署名関数を再度呼び出しました。
私はこのように動作することができません。 .pem
ファイルの秘密鍵をXMLに変換してRSACryptoServiceProviderに読み込まなければなりませんでした。トークン・シークレットを変換前に秘密鍵に連結しようとすると、エラーが発生します。
Jiraへの後続のREST呼び出しを行うためにトークンシークレットに署名するにはどうすればよいですか?
リクエストでセッションクッキーを使用するセッションを作成したので、それ以降のすべてのリクエストでクッキーを設定するだけです。 セッションオブジェクトをクライアントに格納します。これを行う方法は、クライアントの実装方法によって異なります。 リクエストを行う場合は、セッションからCookieの名前と値を取得し、リクエストのヘッダーに「Cookie」フィールドを設定するために使用します。 ヘッダー:{cookie:JSESSIONID = 6E3487971234567896704A9EB4AE501F} –
Sergey Tihon [Twitterに掲載](https://twitter.com/sergey_tihon/status/788240599686213633):[Atlassian.SDK]( https://www.nuget.org/packages/Atlassian.SDK/)。 –