as you suggested I added unique=True as you suggested I reduced the number of db queries from 2 to 1 (when not on GAE) yes it should check for expiration (will add that) as you suggested you can now use a header (web2py_api_token) instead of ?_token=... I think the manage_tokens page is useful so I will leave it there.
I also agree with you that this is more like a login method except that it only works for decorated actions so developer can choose where to allow this. It does not have to create a session but it may. I would recommend using session.forget() within the decorated actions but I do not think it should be default. I can see programs that may want a session to be created. I am happy to change api_tokens name with something else. What do you suggest? Massimo On Sunday, 28 June 2015 16:36:24 UTC-5, Niphlod wrote: > > Ok, read it carefully....All of that IMHO isn't really what users wants to > implement a token-based auth on top of an API. > Apart from the fact that if the scheme of the tokens table gets corrected > (a FK to the user_id and token unique) the first two queries are > collapsible into one, calling login_user() triggers update_groups() (not > sure if an API needs it for every call), plus it renews the session (that > in an API isn't there for sure), and creates a new Session (and again, the > cookie-based Session isn't something an API uses or requires) > > The way I see it, a token-based authentication is good for a kind of > cached/speedy authentication. You expect zillion calls to an API and you > don't want username/passwords flying around, so you publish something > behind the usual auth that generates a code what identifies you. Or you > have a zillions mini-programs that needs to call the api and you don't want > to store username-password combo in each and every program, so you request > a token. Usually the token is also generated for a "scope", so, e.g., the > authenticated user with the token can't invalidate all other tokens...of > change the profile email, etc etc. This goes beyond the scope of a simple > helper in web2py and goes towards being an oauth provider.... an entire > different story. > Let's assume though that the token auth gets the same permissions as the > usual one... who you are (when you generated the token) is only one piece > of the info: the other piece is what you're allowed to do with that token. > For all intents and purposes, a "token-based" auth for an API IMHO > resembles very closely what in non-API environments is persisted in web2py > with the Session (under the hook a cookie with the sesson id). Specifically > the session.auth part. > > non-api: You login, the "heavy auth thingies" take place there and only > there (are you a valid user, is your password correct, which groups are you > in, did you complete the registration process, and so on), and from there > on you are issued a "lightweight" Session that relieves web2py from > constantly checking at every request who you are and what you can do > (through membership) > > api: you request a token for your login, the "heavy auth thingies" take > place there and only there, and you're issued a "lightweight" token (with > an optional expiration) that relieves web2py from costantly checking who > you are and what can you do. > > This naming (api_tokens) collides with the implementation: it's slower > than the default (thinking about basic auth) because it requires at least 3 > queries for any call (1) is there a token, 2) is there a user with that id > (duh?), are there groups for that user). On top of that, it creates a new > session for every call. As it is, it'd better implemented as a new login > method (and BTW, it surely is just a login method), living in contrib. > > > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.