Goodreads Developers discussion
How can I keep the secret in an open source app?
date
newest »


It's a normal idea to have the user enter their own keys and passwords when interacting with online services. Do not keep your own keys in the source code distribution, and neither should you encourage people to distribute their keys to other people.

How would I "authenticate each user with the goodreads system"?

This is non-optimal, but the alternative is having every user register as an api developer, which nobody wants.
This shouldn't be a problem that "any" python program has, just any client side open source program.


I think I'll just ship the "secret" key as you said in a semi-hidden spot, hopefully that won't be taken as a violation of API policies?
Pretty much any desktop application can have its "secret" taken even if it's not open source (with a bit more work, of course), surely taking it from any Python or Ruby desktop app would be trivial :-(

I'd love to heard other sugggestion for how to do this. Our api is modeled after other api's, we didn't get creative. It's designed for the consumers to be server-side apps or closed source.

Ouch, that makes it kinda hard for us to work on it, if it can just disappear at any time.
I suppose this is just useless for us then :-(

Ouch, that makes it kinda hard for us to work on it,..."
Flickr uses this same pattern for their api, and I've never had any issues, but it's certainly a possibility!


I think that's what twitter is now doing with the PIN it gives you when you authorize an app via OAuth.
Would that be feasible?

We typically give warning to api users before cutting off access, but only when we can.


http://arstechnica.com/security/guide...
However, there is a big problem:
I can't have a "secret" key. Since it's open source, the secret key has to be somewhere visible. In fact, any python program that uses the goodreads API will have the same problem, since decompiling them and finding the "secret" is trivial.
So, what can I do? Do I make each user get a separate secret key?