As far as I know there is no such thing as an out of the box solution for a given problem. On a few projects that i was working on we always used our own authentication implementation. Usually its kind of a "2 tier token auth".
The idea is to have 1 token to authorize the app, with that token app gets certain privileges, and its allowed to do selection of the public calls. If users decides to log in trough the app, app exchanges user credentials with the API, and as a result API returns second token to the app. This second token is user specific token and is assigned to certain role, so that API knows what kind of the actions is the user with that token allowed to do, and for which user or groups of users that particular token can make changes to.