I have found numerous academic answers to this question, but I would like one from practitioners in the field.
Background
I would like to create a Java-based RESTful API, using the Grails framework for a variety of mobile clients (iOS and Android) to access protected resources through my service. I require authentication on certain requests, and I already have SSL setup over the wire (so all requests occur over https). My web API will eventually be exposed as a service to other web applications.
Problem
What authentication method do people recommend for a web service that is to be consumed by mobile devices, and eventually other web applications?
These are what I see as my choices. Can you tell me when would be appropriate use cases for each one?
- I can do HTTP Basic authentication
- I can do HTTP Digest authentication
- I can implement OAuth authentication (1.0 or 2.0)?
- I can pass the credentials as parameters in my request
- I can use an authentication method above, and then pass a delegate/token around for authentication
- I can implement my own custom HTTP authentication headers
- I can use cookies and pass those to the server on each request
- Other...?
Need
If you have one leaning one way or another, I'd like to know why you would choose that method. Better yet, if you're doing this in Grails, I'm very interested.
I already know...
I've already read through the excellent answers here and Richardson and Ruby's book, Restful Web Services.