Background
I've a set of WCF REST services and an ASP.NET client application.
Everything about business, data, process and validation occurs in the services' infrastructure.
ASP.NET client application is a consumer of these WCF REST services.
In the near future, these WCF REST services will be consumed by mobile applications (Android, iOS and Windows Phone).
Problem
Optimal way of implementing authentication.
Possible approaches
Token authentication. First successful login generates an authentication token, which is transmitted over the wire back to the client. Next requests will send the authentication token stored in a cookie, because service layer maintains an authentication token store. Tokens will expire in an arbitrary time.
Session-state authentication store. First successful login marks a session in some session state store as an authenticated session. Since Web client stores its session identifier in a cookie, next requests will transport it and service layer checks if session for given identifier is authenticated. Sessions will expire in an arbitrary time.
Question
In my case, I would go for first option: token authentication.
Anyway, I'm worried about security issues, because if someone steals token or session identifier, this may be able to supplant owner's identity.
Summary: what would be your choice?. I'll appreciate that you talk about security concerns.
Note if you've another approach, you can talk about it, I'm open to other possible solutions.
Thank you.