Thanks for sharing Paul!

On 2010-07-26, at 3:18 PM, Paul Tarjan wrote:

> Facebook released an early version of the proposed signature method, with the 
> aim of getting real-life implementation experience. We are not currently 
> using this for protected resource requests, but rather more like if the 
> authorization server returned signed data as part of the access token 
> response. 
> 
> It was generally a success with many people really liking the scheme. 
> 
> Our main takeaway is that MANY developers used normal base64 instead of 
> base64url encoding either because they didn't read the spec thoroughly or 
> just recognized the scheme and started decoding it. This caused weird errors 
> which they weren't ready for (sometimes working when - and _ weren't present, 
> sometimes cutting off some json characters when their language needed padding 
> =, etc). 
> 
> We created an open source set of examples that developers have found helpful, 
> and which could be incorporated into the OAuth example set: 
> http://github.com/ptarjan/base64url
> 
> So, I suggest to keep the signature scheme, but message the fact that it 
> isn't normal base64 VERY loudly and clearly in the spec, and to use examples 
> that will fail hard with normal base64.
> 
> 
> Our implementation followed the OAuth2.0 signature scheme except for 4 
> changes:
> * signature came before payload
> * not_after was renamed expires
> * not all required parameters were present given the difference in use case
> * the parameter was called signed_request instead of signed_token
> 
> You can read our docs here: 
> http://developers.facebook.com/docs/authentication/canvas
> 
> 
> Here is a few snippets of developer feedback that we had about them not 
> understanding to use base64url instead of base64 encoding:
> 
>       ---
>       We're seeing bogus JSON in the new parameter. It looks like a few 
> characters
>       are being left off the end.
> 
>       ---
>       Imcompatible Base64 Encoding between PHP and Java 
> (sun.misc.Base64Encoder)
> 
>       The problem was, I get an extra byte at the end of the Base64 Decoded 
> Sig,
>       comparing to the result I got from Hashing the Payload with my app 
> secret.
> 
>       My guess is that PHP is not encoding base64 strictly following the 
> Base64
>       convention, or, Facebook has removed the tailing "=" from Sig which is 
> required
>       in most Java Base64 implementations.
> 
>       The sun.misc.Base64Decoder decoded the sig with a tailing ">", while 
> another
>       example I found from Internet tail with "0x00".
>       
>       ---
>       Isn't this just turning into a total mess - telling people that they 
> need to
>       refer to Wiki articles to use specific Base64 encode and decode 
> functions and
>       having to post chunks of code in order to try to get it working.
>       
>       ---
>       The problem is actually that there library is buggy and others actually 
> follow
>       the spec. Base64 is well defined. URLencoding is well defined. Unpadded 
> base64
>       with several character substitutions is now well defined :)
>       
>       
> Then people started posting code to each other, some got it wrong:
> 
>       > # Ruby
>       > 
>       > def base64_url_decode(str) 
>       >     return Base64.decode64(str.tr('-_', '+/'))
>       > end
>       > 
> 
>       that does not account for missing padding.  
>       
> 
> Then someone actually read the spec:
> 
>       Facebook is following RFC. http://www.faqs.org/rfcs/rfc3548.html -
>       Section 4. 
>       
>       That said, I don't really agree with the use of the "filename safe" 
> style. I'd
>       implement base64 with the protocol and/or filesystem specific encoding
>       separated, because I don't think the spec should be concerned with 
> that. Also,
>       not many people use this style, so most libraries don't have support 
> for it.
>       But hey, I'm just one of those well-read ruby hipsters, what do I know?
> 
> 
> We got lots of positive feedback about it:
> 
>       ---
>       I'm a fan *cough* of the new auth mechanism;
>       
>       ---
>       I agree that this is much cleaner. I like allowing the original request 
> method
>       to be used. I just wish things followed the actual specification or had 
> their
>       differences documented. As a library maintainer, I would also like to 
> know
>       before things like this are released.
> 
>       ---
>       I'm also perfectly happy with the direction FB is going here.
>       
>       ---
>       I have to say too, I'm also a big fan of the new authentication system, 
> thank
>       you. It has cut out a lot of code for us, and it's a lot easier to 
> debug. This
>       is a good verification system too.
> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org
> https://www.ietf.org/mailman/listinfo/oauth

_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to