It's all about the answers!

Ask a question

Help Needed: RRC Oauth Authentication Code using C#


Akshansh Khare (56178) | asked May 24 '12, 4:32 a.m.
Hi Community,

We are building a C# console application that gets different artifacts count.
Currently there are some instances of RRC that uses Oauth Authentication and some uses Form and Basic.

We build the code that successfully authenticates Form and Basic Authentication for RRC Instances. :)

But currently we are not able to authenticate the Instances using Oauth after lots of trying.:(

Can you please help us in authenticating the RRC instances that uses Oauth Authentication?

Thanks a lot.

Warm Regards
Akki

3 answers



permanent link
Joseph Reedick (10847) | answered May 24 '12, 1:32 p.m.
Okay...

Here's the C# library: http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs (oauth.net/code is still non-responsive.)

Here is the equivalent VB.Net code that makes use of OAuthBase. This code uses the VB.Net conversion of the OAuthBase.cs file (which is also available on oauth.net.) It should be trivial to convert the VB.Net syntax to C#.

Additional reading: https://jazz.net/wiki/bin/view/Main/JFSCoreSecurity#Application_Authentication


Sub test3()
Dim oauthHelper As New OAuth.OAuthBase
Dim consumer_key As String = "Your consumer key here"
Dim consumer_secret As String = "consumer secret here"

' https://jazz.net/wiki/bin/view/Main/JFSCoreSecurity#Application_Authentication
Dim request_token_url As String = "https://myserver.com:9443/jts/oauth-request-token"
Dim access_token_url As String = "https://myserver.com:9443/jts/oauth-access-token"
Dim authorize_url As String = "https://myserver.com:9443/jts/oauth-authorize"


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Step 1: Retrieve Request Token
Console.WriteLine("'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''")
Console.WriteLine(" Step 1: Retrieve Request Token")
Dim normalized_url As String = ""
Dim normalized_request_params As String = ""
Dim oauth_timestamp = oauthHelper.GenerateTimeStamp()
Dim oauth_nonce = oauthHelper.GenerateNonce()

Dim signature As String = oauthHelper.GenerateSignature( _
New System.Uri(request_token_url), _
consumer_key, _
consumer_secret, _
"", _
"", _
"POST", _
oauth_timestamp, _
oauth_nonce, _
OAuth.OAuthBase.SignatureTypes.PLAINTEXT, _
normalized_url, _
normalized_request_params _
)
Console.WriteLine("signature = " + signature)
Console.WriteLine("oauth_timestamp = " + oauth_timestamp)
Console.WriteLine("oauth_nonce = " + oauth_nonce)

Console.WriteLine("normalized_url=" + normalized_url)
Console.WriteLine("normalized_request_params=" + normalized_request_params)


Dim request_params As String = "oauth_consumer_key=" + consumer_key _
+ "&oauth_signature=" + signature _
+ "&oauth_signature_method=PLAINTEXT" _
+ "&oauth_timestamp=" + oauth_timestamp _
+ "&oauth_nonce=" + oauth_nonce _
+ "&oauth_version=1.0"

Dim request As HttpWebRequest = HttpWebRequest.Create(request_token_url)
'Dim request As HttpWebRequest = HttpWebRequest.Create(request_token_url + "?" + normalized_url)
'Dim request As HttpWebRequest = HttpWebRequest.Create(request_token_url + "?" + request_params)
Console.WriteLine("address = " + request.Address.ToString)
request.Method = "POST"
request.ContentType = "application/x-www-form-urlencoded; charset=utf-8"

request.Headers.Add("oauth_signature", signature)
request.Headers.Add("oauth_signature_method", "PLAINTEXT")
request.Headers.Add("oauth_timestamp", oauth_timestamp)
request.Headers.Add("oauth_nonce", oauth_nonce)
request.Headers.Add("oauth_version", "1.0")

Dim writer As StreamWriter = New StreamWriter(request.GetRequestStream())
writer.Write(request_params)
writer.Close()

Console.WriteLine("uri = " + request.Address.ToString)

Dim response As HttpWebResponse
Try
response = request.GetResponse()
Catch ex As WebException
response = ex.Response
End Try

Console.WriteLine("status code = " + response.StatusCode.ToString)
Console.WriteLine("status desc = " + response.StatusDescription)
Dim stream As StreamReader = New StreamReader(response.GetResponseStream())
Dim data As String = stream.ReadToEnd()

Console.WriteLine("data = " + data)
printResponseHeaders(response)

response.Close()


' Get the oauth_token and oauth_token_secret
' Ex: oauth_token=49a5382f440b467dbf9ab82ea35d0018&oauth_token_secret=zgR%2FTogpl6oQpRNUuDIiDICn2b9a3y1ndBaE5K%2BcRpw%3D
Dim oauth_token As String = ""
Dim oauth_token_secret As String = ""
Dim values() As String = data.Split("&")
oauth_token = values(0).Split("=")(1)
oauth_token_secret = values(1).Split("=")(1)

'For Each value In values
' oauth_token = value.Split("=")(0)
' oauth_token_secret = value.Split("=")(1)
'Next
Console.WriteLine("oauth_token = " + oauth_token)
Console.WriteLine("oauth_token_secret = " + oauth_token_secret)



''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Step 2: Authenticate Request Token
Console.WriteLine()
Console.WriteLine("'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''")
Console.WriteLine("Step 2: Authenticate Request Token")

Dim authenticate_request As HttpWebRequest = HttpWebRequest.Create(authorize_url)
authenticate_request.Method = "POST"
authenticate_request.ContentType = "application/x-www-form-urlencoded; charset=utf-8"

'writer = New StreamWriter(authenticate_request.GetRequestStream())
'writer.Write("oauth_consumer_key=" + oauth_token + "&authorize=True")
'writer.Close()

Dim byteArray As Byte() = Encoding.UTF8.GetBytes("oauth_consumer_key=" + oauth_token + "&authorize=True")
'formPost.ContentType = "application/x-www-form-urlencoded"
authenticate_request.ContentLength = byteArray.Length
Dim dataStream As Stream = authenticate_request.GetRequestStream()
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()

Console.WriteLine("Go to the following URL to authenticate:")
Console.WriteLine(String.Format("uri = {0}?oauth_token={1}", authenticate_request.Address.ToString, oauth_token))
Console.WriteLine()
Console.WriteLine("Press enter to continue:")
Console.ReadLine()



Try
response = authenticate_request.GetResponse
Catch ex As WebException
response = ex.Response
End Try

Console.WriteLine("status code = " + response.StatusCode.ToString)
Console.WriteLine("status desc = " + response.StatusDescription)
If (False) Then
stream = New StreamReader(response.GetResponseStream())
data = stream.ReadToEnd()
Console.WriteLine("data = " + data)
End If
printResponseHeaders(response)


response.Close()


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Step 3: Retrieve Access Token
Console.WriteLine()
Console.WriteLine("'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''")
Console.WriteLine("Step 3: Retrieve Access Token")

normalized_url = ""
normalized_request_params = ""
oauth_timestamp = oauthHelper.GenerateTimeStamp()
oauth_nonce = oauthHelper.GenerateNonce()

signature = oauthHelper.GenerateSignature( _
New System.Uri(request_token_url), _
consumer_key, _
consumer_secret, _
oauth_token, _
oauth_token_secret, _
"POST", _
oauth_timestamp, _
oauth_nonce, _
OAuth.OAuthBase.SignatureTypes.PLAINTEXT, _
normalized_url, _
normalized_request_params _
)
Console.WriteLine("signature = " + signature)
Console.WriteLine("oauth_timestamp = " + oauth_timestamp)
Console.WriteLine("oauth_nonce = " + oauth_nonce)

Console.WriteLine("normalized_url=" + normalized_url)
Console.WriteLine("normalized_request_params=" + normalized_request_params)

request_params = "oauth_consumer_key=" + consumer_key _
+ "&oauth_token=" + oauth_token _
+ "&oauth_signature=" + signature _
+ "&oauth_signature_method=PLAINTEXT" _
+ "&oauth_timestamp=" + oauth_timestamp _
+ "&oauth_nonce=" + oauth_nonce _
+ "&oaut_version=1.0"


Dim access_request As HttpWebRequest = HttpWebRequest.Create(access_token_url)
access_request.Method = "POST"
access_request.ContentType = "application/x-www-form-urlencoded; charset=utf-8"

access_request.Headers.Add("oauth_signature", signature)
access_request.Headers.Add("oauth_signature_method", "PLAINTEXT")
access_request.Headers.Add("oauth_timestamp", oauth_timestamp)
access_request.Headers.Add("oauth_nonce", oauth_nonce)
access_request.Headers.Add("oauth_version", "1.0")

writer = New StreamWriter(access_request.GetRequestStream())
writer.Write(request_params)
writer.Close()

Try
response = access_request.GetResponse()
Catch ex As WebException
response = ex.Response
End Try

Console.WriteLine("status code = " + response.StatusCode.ToString)
Console.WriteLine("status desc = " + response.StatusDescription)
stream = New StreamReader(response.GetResponseStream())
data = stream.ReadToEnd()

Console.WriteLine("data = " + data)
printResponseHeaders(response)


response.Close()

End Sub


Also, magic code to disable https certificate checking:

Function ValidateRemoteCertificate(ByVal sender As Object, ByVal certificate As X509Certificate, ByVal chain As X509Chain, ByVal policyErrors As SslPolicyErrors) As Boolean
Return True
End Function

System.Net.ServicePointManager.ServerCertificateValidationCallback = New System.Net.Security.RemoteCertificateValidationCallback(AddressOf ValidateRemoteCertificate)

permanent link
Joseph Reedick (10847) | answered May 24 '12, 10:06 a.m.
Google on "oauth C#". The "oauth.net/code/" site has a C# implementation of OAuth, however, the site appears to be extremely slow or down right now.

permanent link
Akshansh Khare (56178) | answered May 24 '12, 10:18 a.m.
Hi jareedick,

We have googled and found out many articles that authenticate servers with Oauth, but unfortunately we were not able to workaround with those, So we posted a our query on Jazz Forum.

P.S. - Thanks to tells us how to use Google for search.

Regards
Akki

Your answer


Register or to post your answer.


Dashboards and work items are no longer publicly available, so some links may be invalid. We now provide similar information through other means. Learn more here.