- From: Robert Sanderson <azaroth42@gmail.com>
- Date: Sat, 13 Jun 2015 16:39:38 -0700
- Cc: Web Annotation <public-annotation@w3.org>
- Message-ID: <CABevsUFsrXpmQH8_xss_L-BL5C2trbr6Tt47WxVSPmmVCPbkjw@mail.gmail.com>
To be clear, I don't think we should specify *authorization* at all, nor the exact method of *authentication*, but have a standardised workflow which would allow clients to pass the users credentials to the service without necessarily knowing what those credentials are or even how they were obtained, and standardised error responses so the client knows that the user is not authorized to perform the action attempted. It needs to work across arbitrary domains, and via XMLHttpRequest. It should work for browser and non browser based client applications, for human and software agents. What I think should be out of scope: * Authorization rules and scope. e.g. we will not require that users have their own explicit identity, the concept of user groups, the sorts of actions that they can perform, etc. That can all be system specific, so long as the client knows how to discover and send the necessary user information to the service over the protocol. * The specific authentication sub-system. It could be basic auth[1], shibboleth[2], oauth[3], openid connect[4], webauth[5], CAS[6], or something totally home grown. We're never going to get agreement that everyone who wants to run an annotation service will get their organization to implement OAuth2 (or any other specified system). The business logic for authorization is also impossible to specify and will doubtless rely on very different attributes of the user in different situations. Instead we need a pattern that allows different authentication systems to be seamlessly plugged in without requiring the client to know the details, just pass them through. Some concrete use cases to consider: 1. As an annotator, I want to use my own client to annotate the web annotation data model and store those annotations in the webplatform.org service so that they are rendered to other users. That service requires authentication to use. At the same time, I also want to store that annotation in my own service, which uses a different authentication/authorization system. 2. As a web application developer [e.g. ruby on rails], I want to allow my already authenticated users to be able to annotate my resources and store those annotations in my service via the protocol. The user should not have to log in again, as my application has already taken care of that, and instead I want to pass those credentials directly to the annotation service. 3. As an annotator, I want to know that the web application I'm interacting with is not spoofing an external authentication system (such as facebook or google) in order to steal my credentials. 3b. As an annotator using a web application that is pulling in resources from multiple sites for comparison, I do not want to lose my application's state to have to authenticate to a new service. 4. As an annotation system manager, I want to use an authentication system that allows non-human agents to manage annotations, such as batch import of annotations from external annotations services (either standards based or proprietary). That non-human agent should require configuring a completely different authorization system than my human users. I agree it's not annotation specific. I disagree that client credentials are appropriate, as that is identification of the client itself, not the user, such that it can (for example) update its client secret. I'll have a look at 7523, thanks for the reference :) but I'm not sure that it helps in the non-browser, non-human user case. Rob [1] http://tools.ietf.org/html/rfc2617 [2] https://en.wikipedia.org/wiki/Shibboleth_(Internet2) [3] http://oauth.net/2/ [4] http://openid.net/specs/openid-connect-core-1_0.html [5] http://www.cisco.com/c/en/us/td/docs/solutions/Enterprise/Security/TrustSec_1-99/WebAuth/WebAuth_Dep_Guide.html [6] https://en.wikipedia.org/wiki/Central_Authentication_Service On Wed, Jun 10, 2015 at 8:05 AM, Paolo Ciccarese <paolo.ciccarese@gmail.com> wrote: > I echo Randall concern. > > We implemented OAuth2 in Domeo/Annotopia with another mix of technologies. > I think suggesting to use OAuth2 as authentication model is good enough. > > On Mon, Jun 8, 2015 at 2:22 PM, Randall Leeds <randall@bleeds.info> wrote: > >> There is also the OAuth 2 client credentials grant where the access token >> is returned directly. >> >> Or the new RFC 7523 where you could probably return the access token >> directly from a JWT assertion token request. >> >> I think it's pretty ambitious to be specifying authorization, generally. >> There are so many ways to handle it and it's not annotation specific. >> >> On Mon, Jun 8, 2015, 08:26 Susanna Netseven <martinelli@netseven.it> >> wrote: >> >>> Hi Robert, >>> I would like to share our solution regarding Oauth2 authentication. >>> Basically we have an architect which is based on two major components: a >>> Client, that is a sort of chromium extension that user load once landed in >>> a html page he wants to annotate (Pundit client) , and a server that >>> provide a RESTFul API facade and a storage layer (Pundit server). >>> Here you can see a draw for the different layers. >>> http://old.thepund.it/documentation/pundit-server-api/ >>> >>> We have recently introduced, in order to replace the old OpenID >>> Authentication the Oauth2 authentication. >>> >>> We've choose to use Symfony as Oauth2 provider, because it comes with a >>> robust backend in order to manage users (creation, modification editing), >>> moreover by adding a particular bundle it provides Oauth2 authentication: >>> https://github.com/FriendsOfSymfony/FOSOAuthServerBundle >>> Symfony Oauth bundle can be also integrated with Google and Facebook >>> authentication. >>> >>> In order to maintain Symfony DB aligned with users into RDF repository >>> we have implemented a mechanism that permits update for all user's >>> informations. >>> >>> Here you can see 2 different workflows. >>> This first one describes a login with authentication for a not existent >>> user (first time login) >>> >>> https://docs.google.com/drawings/d/1J6z2HFrqZuV1n6bMS2EVNOa6XDVJdIzLTZWoq2SEW_0/pub?w=960&h=720 >>> >>> This second one instead describes login process for already created user: >>> >>> https://docs.google.com/drawings/d/1MeffLYUY8JEMeYPbPozvIIHc2pk09hr7THIr_YCfNoE/pub?w=960&h=720 >>> >>> Last but not least, Pundit server is Tomcat servlet and authentication >>> method could be selected at starting time (by editing web.xml file). >>> There are mainly 2 kind of authentication now, Basic or Oauth both of >>> them provided by the special class. >>> >>> Cheers >>> Susanna >>> >>> On Fri, Jun 5, 2015 at 9:20 PM, Robert Sanderson <azaroth42@gmail.com> >>> wrote: >>> >>>> >>>> Dear all, >>>> >>>> On a recent call we discussed authentication with respect to the >>>> protocol draft. >>>> >>>> Following on from the conclusions of that call, we (Stanford) tried to >>>> implement OAuth2 directly as the framework for auth over top of our >>>> annotation service... and failed. >>>> >>>> The major issue we ran into was where, in a straight client/server >>>> interaction, does the OAuth redirect go back to in order for the client to >>>> obtain the authorization code. We started down the line of changing it to >>>> simply return the code directly to a client, but it became a significant >>>> implementation challenge that was much more easily solved in other ways. >>>> >>>> So we changed course to implement a very similar workflow that allows >>>> the modular inclusion of any authentication system (so far demonstrated >>>> with basic auth and various OAuth2 providers) without the client needing to >>>> know any of the user's information. Instead it can just pass it through. >>>> That workflow was designed for access to protected image content, but works >>>> the same way for access to annotations: >>>> http://image-auth.iiif.io/api/image/2.1/authentication.html >>>> >>>> (You may recognize one (or more) of the editors) >>>> >>>> I believe that the spirit fits within the discussion from the call, but >>>> would appreciate any feedback! >>>> >>>> And, for discussion, should the protocol document discuss >>>> authentication? Any real world implementation is going to need to have >>>> authenticated and authorized users, so I'm wary of either >>>> non-interoperability or lack of implementations if we don't. >>>> >>>> Rob >>>> >>>> -- >>>> Rob Sanderson >>>> Information Standards Advocate >>>> Digital Library Systems and Services >>>> Stanford, CA 94305 >>>> >>> >>> > > > -- > Dr. Paolo Ciccarese > ORCID: http://orcid.org/0000-0002-5156-2703 > -- Rob Sanderson Information Standards Advocate Digital Library Systems and Services Stanford, CA 94305
Received on Saturday, 13 June 2015 23:40:08 UTC