Thanks for reporting back Andrew. I'm sure this
code will help others.
Cheers,
Eric.
On Sep 29, 8:40 pm, Andrew Arnott <[EMAIL PROTECTED]> wrote:
> I found the problem. I was doubly-URL-encoding the signature. You
> see the Uri.EscapeDataString at the end of my GetSignature method?
> Well the method that calls GetSignature does its own escaping as
> well. So it was corrupting the signature. All is well now. Thanks
> for your fast responses!
>
> On Sep 29, 3:34 pm, Andrew Arnott <[EMAIL PROTECTED]> wrote:
>
> > Thanks, Eric. Here is the C# code:
>
> > protected override string
> > GetSignature(ITamperResistantOAuthMessage
> > message) {
> > string key =
> > GetConsumerAndTokenSecretString(message);
> > HashAlgorithm hasher = new
> > HMACSHA1(Encoding.ASCII.GetBytes(key));
> > string baseString =
> > ConstructSignatureBaseString(message);
> > Logger.DebugFormat("Signing message with signature
> > base string:
> > {0}", baseString);
> > byte[] digest =
> > hasher.ComputeHash(Encoding.ASCII.GetBytes(baseString));
> > return
> > Uri.EscapeDataString(Convert.ToBase64String(digest));
> > }
>
> > Note that ConstructSignatureBaseString can and does generate the same
> > string that Google generates, so I think we can assume that works.
> > The GetConsumerAndTokenSecretString is defined here:
>
> > protected string
> > GetConsumerAndTokenSecretString(ITamperResistantOAuthMessage message)
> > {
> > StringBuilder builder = new StringBuilder();
> > if (!string.IsNullOrEmpty(message.ConsumerSecret)) {
> >
> > builder.Append(Uri.EscapeDataString(message.ConsumerSecret));
> > }
> > builder.Append("&");
> > if (!string.IsNullOrEmpty(message.TokenSecret)) {
> >
> > builder.Append(Uri.EscapeDataString(message.TokenSecret));
> > }
> > return builder.ToString();
> > }
>
> > Does this give you any ideas?
>
> > Thanks again
>
> > On Sep 29, 2:50 pm, "Eric (Google)" <[EMAIL PROTECTED]> wrote:
>
> > > Then it looks like you're not creating the oauth_signature correctly,
> > > because everything else is in place.
>
> > > Feel free to post the snippet of code that signs the base string
> > > (with dummy values) and I'll take a look.
>
> > > Thanks,
> > > Eric
>
> > > On Sep 29, 1:55 pm, Andrew Arnott <[EMAIL PROTECTED]> wrote:
>
> > > > The same consumer key and secret, when plugged into googlecodesamples,
> > > > works. I left that part out of my last email although I'd seen that
> > > > behavior and was puzzled by why it works there and not in my own
> > > > client.
>
> > > > On Sep 29, 11:04 am, "Eric (Google)" <[EMAIL PROTECTED]> wrote:
>
> > > > > Hi Andrew,
>
> > > > > What happens if you use your own oauth_consumer_key and secret in the
> > > > > OAuth Playground:http://googlecodesamples.com/oauth_playground/
>
> > > > > (make sure to switch the oauth_signature_method to HMAC-SHA1)
>
> > > > > Eric
>
> > > > > On Sep 29, 8:10 am, "Andrew Arnott" <[EMAIL PROTECTED]> wrote:
>
> > > > > > My signature base string: GET&https%3A%2F%2Fwww.google.com
> > > > > > %2Faccounts%2FOAuthGetRequestToken&oauth_consumer_key%3Dnerdbank.org%26oauth_nonce%3DScayJb8F%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1222700601%26oauth_version%3D1.0%26scope%3Dhttp%253A%252F%
> > > > > > 252Fwww.google.com%252Fm8%252Ffeeds%252F
>
> > > > > > My signature: Vfj3%2FteRSd4gvDV2mQelo%2BsNcFI%3D
>
> > > > > > The actual HTTP request:
> > > > > > GEThttps://www.google.com/accounts/OAuthGetRequestToken?scope=http://www...
> > > > > > Using Authorization header with these fields and values in it:
>
> > > > > > oauth_signature_method: HMAC-SHA1
> > > > > > oauth_consumer_key: nerdbank.org
> > > > > > oauth_signature: Vfj3%2FteRSd4gvDV2mQelo%2BsNcFI%3D
> > > > > > oauth_nonce: ScayJb8F
> > > > > > oauth_version: 1.0
> > > > > > oauth_timestamp: 1222700601
>
> > > > > > Google seems to be reading all the parameters just fine, because it
> > > > > > constructs an identical signature base string, which it sends back
> > > > > > to me
> > > > > > with a "signature invalid" message. If our signature base strings
> > > > > > agree,
> > > > > > and assuming the consumer key and secret are correct (which I've
> > > > > > triple-checked), what else can go wrong here to result in Google
> > > > > > saying the
> > > > > > signature is invalid?
>
> > > > > > Thanks.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google Data Protocol" 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/google-help-dataapi?hl=en
-~----------~----~----~----~------~----~------~--~---