Hi Jason,
   I am successfully validated the requests using this C# routine. I
did some negative testing as well and it is working great. Please go
ahead and post the code.

Thanks,
-Akash

On Sep 30, 10:22 pm, Jason <[EMAIL PROTECTED]> wrote:
> Are you able to successfully validate requests using this C# routine?
> If so, very good work! :) You mention that your code isn't production-
> quality, but if you wanted to polish it a bit, we would love to host
> it on the opensocial-resources wiki with the PHP and Java
> implementations.
>
> - Jason
>
> On Sep 27, 1:43 am, Akash <[EMAIL PROTECTED]> wrote:
>
>
>
> > I think I cracked the holy grail (At least for me:-)).
>
> > Client Side:-
> > I am using following javascript code to make a web service call.
>
> >              var map = { "Content-Type" : "application/soap+xml;
> > charset=utf-8"};
>
> >          var params = {};
> >          soapRequest =
> >                                 "<?xml version=\"1.0\" 
> > encoding=\"utf-8\"?>" +
> >                                 "<soap12:Envelope " +
> >                                 
> > "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"; " +
> >                                 
> > "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"; " +
> >                                 
> > "xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\";>" +
> >                                 "<soap12:Body>" +
> >                                 "<" + method + " xmlns=\"" + ns + "\">" +
> >                                 parameters.toXml() +
> >                                 "</" + method + 
> > "></soap12:Body></soap12:Envelope>";
> > params[gadgets.io.RequestParameters.METHOD] =
> > gadgets.io.MethodType.POST;
> > params[gadgets.io.RequestParameters.CONTENT_TYPE] =
> > gadgets.io.ContentType.DOM;
> > params[gadgets.io.RequestParameters.HEADERS] = map;
> > params[gadgets.io.RequestParameters.AUTHORIZATION] =
> > gadgets.io.AuthorizationType.SIGNED;
> > params[gadgets.io.RequestParameters.POST_DATA] = soapRequest;
>
> > gadgets.io.makeRequest(url, function(req){
> > SOAPClient._onSendSoapRequest(method, async, callback, context, wsdl,
> > req);
> >         }, params);
>
> > When the post request reach Orkut Proxy Container, it generates a base
> > signature string (http://oauth.net/core/1.0/#anchor14) by Concatenate
> > Request Elements
> > The following items MUST be concatenated in order into a single
> > string. Each item is encoded (Parameter Encoding) and separated by an
> > ‘&’ character (ASCII code 38), even if empty.
> > 1. The HTTP request method used to send the request. Value MUST be
> > uppercase, for example: HEAD, GET , POST, etc.
> > In our case it is "POST"
>
> > 2. The request URL from Section 9.1.2 (Construct Request URL).
> >    In our case it ishttp://www.ApplicationServer.com/iApp/Service.asmx
>
> > 3. The normalized request parameters string from Section 9.1.1
> > (Normalize Request Parameters).
> > The request parameters added are following:-
>
> > opensocial_owner_id      04260157720044639260
> > opensocial_viewer_id      04260157720044639260
> > opensocial_app_id      12536334869062616675
> > opensocial_app_url      http://www.ApplicationServer.com/iApp/KM.xml
> > xoauth_signature_publickey      pub.
> > 1199819524.-1556113204990931254.cer
> > oauth_consumer_key      orkut.com
> > oauth_timestamp      1222452522
> > oauth_nonce      1222452522836105000
>
> > Base signature string is signed(hashed) and a private key is input for
> > RSA-SHA1 algorithm and it generates a signature.
>
> > Finally orkut container makes a web service call to the application
> > server on behalf of orkut application.
>
> > IMPORTANT: Inside the web method all parameters added by orkut
> > container are available inside this.Context.Request.Params. These
> > parameters are
> > opensocial_owner_id      04260157720043639260
> > opensocial_viewer_id      04260157720043639260
> > opensocial_app_id      12536334849062616675
> > opensocial_app_url      http://www.ApplicationServer.com/iApp/KM.xml
> > xoauth_signature_publickey      pub.
> > 1199819524.-1556113204990931254.cer
> > oauth_consumer_key      orkut.com
> > oauth_timestamp      1222452522
> > oauth_nonce      1222452522836105000
>
> > oauth_signature_method      RSA-SHA1
> > oauth_signature      Q1xim4r9e+3LOpObb6GWhGkw41a8MTc9a
> > +bNuleE8jwRyymXbdZNJBIq3N2RoC9Ojri2ha1V43Mj0JfovNDpYKoPnAUlwsUGzAp7KzpXcdAe­yUw6txeCtkVSdsiWw7NhX/
> > btdJs2dQzbMKBptGAfLdwjCYThmqLqwDicHU1Dr34=
>
> > Verification:-
>
> > I am using the codehttp://code.google.com/p/devdefined-tools/wiki/OAuth
> > byhttp://code.google.com/u/bittercoder/(Thankyou for help and great
> > work)
>
> > I created OpenSocialCertificates.cs that has content of certificate
> > pub.1199819524.-1556113204990931254.cer
>
> > *****OpenSocialCertificates.cs *****
> > using System.Security.Cryptography.X509Certificates;
> > using System.Text;
>
> > namespace DevDefined.OAuth
> > {
> >     public class OpenSocialCertificates
> >     {
> >         private const string _orkutCertificate =
> >     @"-----BEGIN CERTIFICATE-----
> > MIIDHDCCAoWgAwIBAgIJAMbTCksqLiWeMA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNV
> > BAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIG
> > A1UEChMLR29vZ2xlIEluYy4xDjAMBgNVBAsTBU9ya3V0MQ4wDAYDVQQDEwVscnlh
> > bjAeFw0wODAxMDgxOTE1MjdaFw0wOTAxMDcxOTE1MjdaMGgxCzAJBgNVBAYTAlVT
> > MQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChML
> > R29vZ2xlIEluYy4xDjAMBgNVBAsTBU9ya3V0MQ4wDAYDVQQDEwVscnlhbjCBnzAN
> > BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAseBXZ4NDhm24nX3sJRiZJhvy9eDZX12G
> > j4HWAMmhAcnm2iBgYpAigwhVHtOs+ZIUIdzQHvHeNd0ydc1Jg8e+C+Mlzo38OvaG
> > D3qwvzJ0LNn7L80c0XVrvEALdD9zrO+0XSZpTK9PJrl2W59lZlJFUk3pV+jFR8NY
> > eB/fto7AVtECAwEAAaOBzTCByjAdBgNVHQ4EFgQUv7TZGZaI+FifzjpTVjtPHSvb
> > XqUwgZoGA1UdIwSBkjCBj4AUv7TZGZaI+FifzjpTVjtPHSvbXqWhbKRqMGgxCzAJ
> > BgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEU
> > MBIGA1UEChMLR29vZ2xlIEluYy4xDjAMBgNVBAsTBU9ya3V0MQ4wDAYDVQQDEwVs
> > cnlhboIJAMbTCksqLiWeMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEA
> > CETnhlEnCJVDXoEtSSwUBLP/147sqiu9a4TNqchTHJObwTwDPUMaU6XIs2OTMmFu
> > GeIYpkHXzTa9Q6IKlc7Bt2xkSeY3siRWCxvZekMxPvv7YTcnaVlZzHrVfAzqNsTG
> > P3J//C0j+8JWg6G+zuo5k7pNRKDY76GxxHPYamdLfwk=
> > -----END CERTIFICATE-----";
>
> >         public static X509Certificate2 OrkutCertificate
> >         {
> >             get { return new
> > X509Certificate2(Encoding.ASCII.GetBytes(_orkutCertificate)); }
> >         }
> >     }
>
> > }
>
> > I added another method inside OAuthContextBuilder.cs because the
> > parameters using for validation are inside datastructure
> > request.Params
>
> >        public OAuthContext FromHttpParams(HttpRequest request)
> >         {
> >             var context = new OAuthContext();
>
> > // Required to create signature base string
> > // Http Method
> >             context.RequestMethod = request.HttpMethod;
> > //Request URL
> >             context.RawUri = new Uri("http://"; +
> > request.Params["SERVER_NAME"] + request.Params["SCRIPT_NAME"]);
>
> > //Request parameters
> >             context.authParams.Add("opensocial_owner_id",
> > request.Params["opensocial_owner_id"]);
> >             context.authParams.Add("opensocial_viewer_id",
> > request.Params["opensocial_viewer_id"]);
> >             context.authParams.Add("opensocial_app_id",
> > request.Params["opensocial_app_id"]);
> >             context.authParams.Add("opensocial_app_url",
> > request.Params["opensocial_app_url"]);
> >             context.authParams.Add("xoauth_signature_publickey",
> > request.Params["xoauth_signature_publickey"]);
> >             context.authParams.Add(Parameters.OAuth_Consumer_Key,
> > request.Params[Parameters.OAuth_Consumer_Key]);
> >             context.authParams.Add(Parameters.OAuth_Signature_Method,
> > request.Params[Parameters.OAuth_Signature_Method]);
> >             context.authParams.Add(Parameters.OAuth_Timestamp,
> > request.Params[Parameters.OAuth_Timestamp]);
> >             context.authParams.Add(Parameters.OAuth_Nonce,
> > request.Params[Parameters.OAuth_Nonce]);
>
> > //Algorithm used for signing
> >             context.SignatureMethod =
> > request.Params[Parameters.OAuth_Signature_Method];
>
> > //Signature
> >             context.Signature =
> > request.Params[Parameters.OAuth_Signature];
>
> >             return context;
> >         }
>
> > Inside OAuthContext.cs I added a name value collection named
> > authParams
>
> >         public OAuthContext()
> >         {
> >             ...
> >                 ...
> >                 ...
> >                 ...
> >                 ...
> >             //Akash
> >             authParams = new NameValueCollection();
> >         }
>
> >             ...
> >                 ...
> >                 ...
> >                 ...
> >                 ...
>
> >         public NameValueCollection authParams
> >         {
> >             get
> >             {
> >                 if (_authParams == null) _authParams = new
> > NameValueCollection();
> >                 return _authParams;
> >             }
> >             set { _authParams = value; }
> >         }
>
> >             ...
> >                 ...
> >                 ...
> >                 ...
> >                 ...
>
> > Following is the code for generating signature based
>
> >         public string GenerateSignatureBaseAuthParams()
> >         {
> >             var allParameters = new List<QueryParameter>();
> >             allParameters.AddRange(authParams.ToQueryParameters());
>
> >             // Returns signature based
>
> >             return UriUtility.FormatParameters(RequestMethod, new
> > Uri(NormalizedRequestUrl), allParameters);
> >         }
>
> > Here is the code for validation
>
> >     private static string ValidateWithDevDefinedOAuth(HttpRequest req)
> >     {
> >    
>
> ...
>
> read more »- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Orkut Developer Forum" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/opensocial-orkut?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to