Return-Path: <thomasclinganjones@gmail.com>
X-Original-To: txauth@ietfa.amsl.com
Delivered-To: txauth@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1])
 by ietfa.amsl.com (Postfix) with ESMTP id AE01A3A080F
 for <txauth@ietfa.amsl.com>; Fri, 26 Jun 2020 08:17:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.087
X-Spam-Level: 
X-Spam-Status: No, score=-2.087 tagged_above=-999 required=5
 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
 DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001,
 T_REMOTE_IMAGE=0.01, URIBL_BLOCKED=0.001]
 autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key)
 header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44])
 by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id f0tFShVzzuSj for <txauth@ietfa.amsl.com>;
 Fri, 26 Jun 2020 08:17:47 -0700 (PDT)
Received: from mail-oi1-x234.google.com (mail-oi1-x234.google.com
 [IPv6:2607:f8b0:4864:20::234])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by ietfa.amsl.com (Postfix) with ESMTPS id 88CBB3A080A
 for <txauth@ietf.org>; Fri, 26 Jun 2020 08:17:47 -0700 (PDT)
Received: by mail-oi1-x234.google.com with SMTP id k6so4470853oij.11
 for <txauth@ietf.org>; Fri, 26 Jun 2020 08:17:47 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; 
 h=mime-version:references:in-reply-to:from:date:message-id:subject:to
 :cc; bh=iUR4w0phaaHtQUpRrOYnNTpXA03Veg3rKaADOjFVh54=;
 b=LYzVvIifKsisy7IWSqfs4CnVL+uObgmOa8G+9XS/mbgEi+iXz9++kNI6wJC+V8lATq
 XMLSy2qJp9D0j7GHm45jPX4loKKfBJypzMb/dOZ2OuiHlYFplMG/m69AK9mr0AVkF954
 F1HU5fKqMT+y916v/Kw0ELlX5/EA8fZH8IQSn2zzkzRW9qFvfA4lEMlNIUGX3xvgvD+q
 FAiqM8r5R2ETuGP1rD6eT+5WkO5L9M53Q2Lq69Hblg1kFIsCKmajpDlYn5KlQ0lRV96g
 EZdo+jOSXP0ukKuA8v6Y/cZLo4CksKHWp4mtqqLcXGGpnqTalQhsJPfcdRVStXmo7HMT
 tysA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:mime-version:references:in-reply-to:from:date
 :message-id:subject:to:cc;
 bh=iUR4w0phaaHtQUpRrOYnNTpXA03Veg3rKaADOjFVh54=;
 b=XlTsMixZvkSp1fi8nNC7KgoseF9ibu5lgLNnuq4L1RwAYetB7uF5B/pVdqO39+KebC
 NCq2ZEG2Rhpi6meS4447O7ho0HrSOUbbkrlooNdl+6Z6ZtC1wYqykzz1AncxNQeQQ43S
 IR/VukfexgH+hPy+tifnSWSAknpR845Hwi2fiMbIdeCSTkWcYQG/q5jdPxPSHUB073Od
 Br+3Ck+o8gvvB+jhtBlwIMkD5425NrpwiTxTMkC4JHjEzUjqmvmMAGCPA1xAdAb7zVdg
 AgFsIumxIu1fpsJbNn0cecirj7YfS9/zuWtJfiyUivSDUxyeLgwbFcqTm79IOuP5Z1Nk
 N6Gw==
X-Gm-Message-State: AOAM5319nYQYTsiOyXgzEZNfci8qGguOtfDL2EINjNDC+nQSkdCQEvW6
 DLnhfYgZ/cGzfywPrwBJqYb83m9BLGhRytU5GLg=
X-Google-Smtp-Source: ABdhPJwM6M4KBhja+8M3J8yL7l5nTYinKLRXyZgguTdRgSzJBF1k63jfdoDsxw3fD81khNbzHmLa45eBO2eixFkOENM=
X-Received: by 2002:aca:554c:: with SMTP id j73mr2912230oib.172.1593184666537; 
 Fri, 26 Jun 2020 08:17:46 -0700 (PDT)
MIME-Version: 1.0
References: <4F145676-A126-4D35-8890-A0DDF891EA06@mit.edu>
 <32ae1a93-fc9d-cd15-798e-ec493482dd26@free.fr>
 <90F181EE-8E34-4486-BCFB-ADACE55A55CF@mit.edu>
 <dd8ef917-c63a-0070-810a-aecfd9aac0a0@free.fr>
 <CAJmmfSRMWRMQbfZ2ktaRRq1oVeZtXSRf0TGiCJmcLi1FJF6N+w@mail.gmail.com>
 <6CCD515B-BE87-452B-9034-777D90E110DD@mit.edu>
In-Reply-To: <6CCD515B-BE87-452B-9034-777D90E110DD@mit.edu>
From: Tom Jones <thomasclinganjones@gmail.com>
Date: Fri, 26 Jun 2020 08:17:34 -0700
Message-ID: <CAK2Cwb4RMRT-_AJerg6DbGJ08naO1=aHOD3r-RKaU0N5BVvDjw@mail.gmail.com>
To: Justin Richer <jricher@mit.edu>
Cc: Tobias Looker <tobias.looker@mattr.global>, Denis <denis.ietf@free.fr>,
 txauth@ietf.org
Content-Type: multipart/alternative; boundary="0000000000001c580005a8fe36b2"
Archived-At: <https://mailarchive.ietf.org/arch/msg/txauth/y2XyTqkCZDKXAEXhpjzWpxe5KwE>
Subject: Re: [Txauth] Use Case: Directed Tokens
X-BeenThere: txauth@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <txauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/txauth>,
 <mailto:txauth-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/txauth/>
List-Post: <mailto:txauth@ietf.org>
List-Help: <mailto:txauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/txauth>,
 <mailto:txauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 26 Jun 2020 15:17:51 -0000

--0000000000001c580005a8fe36b2
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

While there are multiple reasons for bound tokens, each with their own
needs, I strongly encourage an effort to create a single broad spec that
could address the common security issues. Tobias, this is the general idea
you were pushing on application level networking. As a general rule, I
believe that the current effort to base security on channel binding has
already been extended beyond its capabilities. (That is the concept that
the HTTPS key is used as the security for the messages.) So, can't we focus
on the problem of identifying the participants to an extended set of
interchanges. This would formalize the earlier statements that the as and
rs most likely have an ongoing security context on which to build
subsequent interchanges.
Peace ..tom


On Fri, Jun 26, 2020 at 6:23 AM Justin Richer <jricher@mit.edu> wrote:

> On Jun 25, 2020, at 9:07 PM, Tobias Looker <tobias.looker@mattr.global>
> wrote:
>
>
> I find this feature interesting and think it could be an important patter=
n
> going forward to enable an AS to be able to describe the utility of a tok=
en
> to the client, however as already pointed out in the thread I think there
> is some potential hidden complexity that would need to be ironed out such
> that it does not make the simple things complicated.
>
> Justin, do you see this feature as something the client has to explicitly
> request, i.e "please give me access and instructions on how to use my
> access" or rather that the AS would just return this information in
> conjunction with the access token if it had it available?
>
>
> This is something that I=E2=80=99d brought up as a possibility on the pre=
vious
> thread =E2=80=94 something like a flag the client would set. This would b=
e
> especially important if the AS wants to return multiple access tokens but
> the client requested 1, or the client requested N and the AS wants to
> return M in response. Basically any time there=E2=80=99s a mismatch, that=
=E2=80=99s extra
> complexity on the client that I really don=E2=80=99t think we want to be =
universal.
> A flag to turn that kind of direction and splitting on would be a potenti=
al
> start. But there are potential snags here too, and it comes down to how y=
ou
> manage the defaults...
>
> > This is just the start, too. Things get even more complex if the client
> can ask for multiple different kinds of resources at once. What if the AS
> decides that the client needs a hyper-focused directed token for one part
> of the API, but can use a general token for other stuff? Can it signal th=
at
> to the client? And if it can, does that mean that all clients need to be
> prepared for that kind of thing?
>
> Would a potential default be that if a client did for any reason not
> support processing the additional information returned with the
> access_token, just to ignore it? I think in the spirit of keeping the
> simple things simple, this potentially makes sense?
>
>
> That=E2=80=99s the real trick, if you ask me. It has to be :safe: for a c=
lient to
> ignore this information. Which means the AS can=E2=80=99t rely on the cli=
ent =E2=80=9Cdoing
> the right thing=E2=80=9D with the information in the =E2=80=9Ctoken direc=
tions=E2=80=9D portion of
> the response. Even setting aside the advanced and related =E2=80=9Csplit =
tokens=E2=80=9D
> idea above, we need to make sure that an AS/RS setup is built such that i=
f
> the AS tells a client =E2=80=9Conly do X with your token=E2=80=9D and the=
 client does =E2=80=9CY=E2=80=9D,
> then there are other protections and practices in place to prevent things
> from going haywire if the client does =E2=80=9CY=E2=80=9D either by accid=
ent or through
> ignorance.
>
> If OAuth 2 has taught us anything, it=E2=80=99s that client applications =
are going
> to be the laziest participants in the security model. And that makes sens=
e,
> really =E2=80=94 security isn=E2=80=99t what the client apps are trying t=
o do, they=E2=80=99re
> trying to use the RS to do something. So we need to make sure that whatev=
er
> system we design will fail on the safe side as much as possible, and keep
> things simple for the client.
>
>
> > here are some worked out samples of this:
> https://wiki.idesg.org/wiki/index.php/High_Assurance_AZ_Token
> https://mattrglobal.github.io/oidc-client-bound-assertions-spec/
> Peace ..tom
>
> As one of the authors of those mentioned drafts, I am interested in
> discussing that, but perhaps on a seperate thread? As at least the bound
> assertion spec is primarily concerned with binding mechanisms for the
> artifacts produced from an authorization flow (specifically identity
> claims), whereas I think directed access tokens is just more generally
> talking about whether GNAP should support an AS conveying how to use an
> access_token it produces during a flow with a client.
>
>
> I think that these are separate issues as well.
>
>  =E2=80=94 Justin
>
> Thanks,
> [image: Mattr website] <https://mattr.global/>
> *Tobias Looker*
> Mattr
> +64 (0) 27 378 0461
> tobias.looker@mattr.global
> [image: Mattr website] <https://mattr.global/> [image: Mattr on LinkedIn]
> <https://www.linkedin.com/company/mattrglobal> [image: Mattr on Twitter]
> <https://twitter.com/mattrglobal> [image: Mattr on Github]
> <https://github.com/mattrglobal>
> This communication, including any attachments, is confidential. If you ar=
e
> not the intended recipient, you should not read it - please contact me
> immediately, destroy it, and do not copy or use any part of this
> communication or disclose anything about it. Thank you. Please note that
> this communication does not designate an information system for the
> purposes of the Electronic Transactions Act 2002.
>
>
> On Wed, Jun 24, 2020 at 10:14 PM Denis <denis.ietf@free.fr> wrote:
>
>> Justin, I fear we are still far away from an agreement about what this
>> BoF should do.
>>
>> Tom Jones is saying " I am getting tired of the whack-a-mole approach ..=
."
>>
>> I don't agree with you when you write: "I think it=E2=80=99s going to be
>> overwhelmingly common that a given RS is going to trust exactly one AS
>> that it knows about ahead of time". Such an architecture would have
>> exactly the same limitations as OAuth 2.0. and would not be scalable.
>>
>> Before we start, we should have a clear view of the whole picture rather
>> than starting from one scenario and expanding it in many different
>> directions.
>> For building an architecture, a pre-requirement is to define ALL the
>> trust relationships. I don't believe that we have an agreement at this t=
ime
>> on what
>> these trust relationships are.
>>
>> You are also using the following wording: "methods for the AS and RS to
>> communicate what the token=E2=80=99s good for".
>> With such a paradigm, it would be impossible to protect the user's
>> privacy.
>>
>> A key question is : Will GNAP take care of the user's privacy or will
>> GNAP *prevent *to take care of the user's privacy ?
>>
>> About "the ability for the client to get several access tokens to get
>> different resources from one request" is indeed a complex case.
>>
>> No one (including ASs) is able to predict in advance which access tokens
>> will be needed, since they depend upon the kind of operation(s)
>> the client will be willing to perform. For privacy reasons, ASs should b=
e
>> kept ignorant of all the operations that a client is going to perform
>> on one or more resource servers. I believe that every effort should be
>> made to avoid the AS to be in a position to be able to trace the operati=
ons
>> performed by its clients on various RSs.
>>
>> To handle the complex case you envision, the full workflow of operations
>> needs to be considered with a detailed focus on the time
>> at which the user's *consent and choice* happens (*consent and choice*
>> is the first privacy principle from ISO 29100).
>>
>> First of all, an access token could be targeted to a service rather than
>> to a server. This would already solve many cases.
>>
>> When a RS needs to call another RS (which does not support the same
>> service) then the client should be informed by the first RS.
>> His "consent and choice" should then be obtained by the first RS and,
>> when the user agrees, the client should then ask an access token
>> to one of the ASs trusted by the second RS in order to perform the
>> subsequent operation.
>>
>> Denis
>>
>> PS.  In an email sent on June 23 you wrote: " I think an on-device AS is
>> an important use case".  I am sorry, but I don't understand.
>>        However, I do understand what "a server-based AS" is.
>>
>>
>> Denis, thanks for the great comments. I think that your trust model is
>> pretty different from what I=E2=80=99d laid out initially, and while it=
=E2=80=99s an
>> interesting and important one, it is not what I meant by =E2=80=9Cmultip=
le access
>> tokens=E2=80=9D in my discussion below. I think that might be the cause =
of some
>> disconnect here, but that doesn=E2=80=99t mean it=E2=80=99s out of reach=
 for what the WG is
>> after.
>>
>> When I refer to multiple access tokens, and what the charter calls out a=
s
>> multiple access tokens, is the ability for the client to get several acc=
ess
>> tokens to get different resources from one request. I personally see thi=
s
>> as an optimization of a specific set of use cases, some of which I
>> discussed in my original email. There are others, I=E2=80=99m sure, but =
all the
>> ones I=E2=80=99ve seen are around the client needing to get several diff=
erent kinds
>> of access through an AS.
>>
>> I think it=E2=80=99s going to be overwhelmingly common that a given RS i=
s going
>> to trust exactly one AS that it knows about ahead of time. But for RS=E2=
=80=99s
>> that can trust multiple AS=E2=80=99s, then we should have a model that c=
an
>> accommodate that as well. That=E2=80=99s why the charter calls out metho=
ds for the
>> AS and RS to communicate what the token=E2=80=99s good for. I think the =
basis of
>> those methods is going to start with a common token model, and likely
>> incorporate into things like token formats and introspection-style token
>> APIs.
>>
>>  =E2=80=94 Justin
>>
>> On Jun 22, 2020, at 3:55 AM, Denis <denis.ietf@free.fr> wrote:
>>
>> Hello Justin,
>>
>> A few comments between the lines.
>>
>> One of the most important aspects to GNAP is going to be an ability to
>> address things that OAuth 2 can=E2=80=99t, or at least can=E2=80=99t do =
without significant
>> gymnastics. So with that, I wanted to bring back a use case discussion t=
hat
>> originally came up while we were talking about the possibility of multip=
le
>> access tokens, a few months back. I don=E2=80=99t know if this concept h=
as a
>> regular term, so I=E2=80=99m going to call it =E2=80=9Cdirected access t=
okens=E2=80=9D until we
>> come up with something better =E2=80=94 assuming we decide this is worth=
while.
>>
>> I don't understand what may mean "directed access tokens=E2=80=9D but I
>> understand what means "multiple access tokens".
>> When speaking of "multiple access tokens", these access tokens may come
>> from one or more ASs.
>>
>> In OAuth, the client=E2=80=99s supposed to always know where to send its=
 access
>> token, and that knowledge is completely outside the protocol. This makes=
 a
>> lot of sense for many (if not most) deployments, as OAuth is really ther=
e
>> to enable the API access that the client already knows about.
>>
>> But we=E2=80=99re now in a world where a client could be talking to a ge=
neric API
>> that could be deployed at a number of different places, or a cloud
>> deployment that the AS wants to be able to dispatch the client to.
>>
>> As soon the AS is placed (again) at the centre of the model, the AS will
>> have the ability to act as "Big Brother".
>> OAuth 2.0 has not taken care of privacy issues. On the contrary, GNAP
>> should take care of them.
>>
>> In order to do this, the AS needs to be able to communicate to the clien=
t
>> not only the token information (and any related key and presentation
>> information), but also a set of *directions* about what that specific
>> token is good for. This needs to be information outside the token itself=
,
>> since I believe we want to keep OAuth 2=E2=80=99s feature of having the =
token be
>> opaque to the client. Note: while we could map all of these to different
>> resource requests (in XYZ parlance) or scopes (in OAuth 2 legacy parlanc=
e)
>> on the request side, this isn=E2=80=99t enough to tell the client what t=
o do with
>> the token *if it doesn=E2=80=99t know already*.
>>
>> I know of two use cases already in the wild, where people are addressing
>> things using a mix of existing standards and some proprietary extensions=
 to
>> address things within their silos. I=E2=80=99ll try to summarize here, b=
ut I know
>> the folks I=E2=80=99ve been talking to about this are also on the list s=
o hopefully
>> they can chime in with more detail or any corrections for something I=E2=
=80=99ve
>> missed.
>>
>> (1) The client knows what resource it=E2=80=99s calling, but it doesn=E2=
=80=99t know
>> where it=E2=80=99s hosted. Everything is in a single security domain con=
trolled by
>> the AS,
>>
>> Speaking of "multiple access tokens" is in contradiction with single
>> security domain "controlled" by an AS.
>> A user may need to demonstrate some of his identity attributes granted
>> e.g. by his bank but may also
>> need to demonstrate one or more diplomas granted by one or more
>> universities. The bank cannot be
>> the "primary issuer" of a university diploma. It should not be either a
>> "secondary issuer", because
>> the bank does not "*need to know"* what are the diplomas of the user.
>>
>> but the AS needs to decide at runtime which specific instance of the API
>> to direct the client to. Since things are closely tied together, the cli=
ent
>> just needs to effectively known an identifier for the RS, and this is
>> currently implemented as a URI. Once the client has that identifier, it
>> knows how to dispatch that token to that instance of the RS.
>>
>> There is no good reason why the AS should be involved in that step.
>> OAuth 2.0 is/was implicitly mandating a strong relationship between ASs
>> and RSs which makes it non scalable.
>> GNAP should be based on a simple trust relationship : a given RS trusts
>> some ASs for access tokens that contains some types of attributes.
>> An AS should not need to know in advance (or even at the time of an
>> access token request) the RSs that are trusting it.
>>
>> A client could first talk to a "global service provider" which has the
>> knowledge of the different RSs affiliated to it.
>>
>> (2) The client knows what kind of thing it=E2=80=99s looking for, but do=
esn=E2=80=99t
>> know who to ask it from.
>>
>> Once again, the client could first talk to a "global service provider"
>> which has the knowledge of the different RSs affiliated to it.
>>
>> There=E2=80=99s a cross-domain trust that=E2=80=99s bridged by the AS, a=
nd the AS needs
>> to dispatch to different resources depending on which user logged in (an=
d
>> possibly what the user consented to). To make things more concrete, the
>> client needs to get driver=E2=80=99s license information, but doesn=E2=
=80=99t know ahead of
>> time which of the many state/provincial bureaus to call to get that
>> information because it doesn=E2=80=99t know yet who the user is.
>>
>> When a user has a driving license, he knows its issuer. The user can the=
n
>> provide some hint to the client.
>>
>> The AS will know who the user is once they log in and approve things, an=
d
>> so it can direct the client to call the correct RS. Since this is a
>> relatively simple API with a pre-negotiated cross-domain trust, the AS
>> returns a URL that the client presents the token at.
>>
>>  A single AS should not be aware of all the attributes a user has.
>>
>>
>> As far as I know, in both of these cases, the token is only good for tha=
t
>> API and not others =E2=80=94 but more on that later.
>>
>> A simple thing to do is just give back a URL with the access token, whic=
h
>> tells the client where to go.
>>
>> {
>> =E2=80=9Caccess_token=E2=80=9D: {
>> =E2=80=9Cvalue=E2=80=9D: =E2=80=9C87yui843yfer=E2=80=9D,
>> =E2=80=9Cresource_uri=E2=80=9D: =E2=80=9Chttps://example/foo"
>> }
>> }
>>
>> This is good for some kinds of APIs, but it=E2=80=99s limiting because n=
ot all
>> APIs dispatch based on the URL. An AS might want to divvy up access toke=
ns
>> to an API that=E2=80=99s keyed on headers, or verbs, or any number of th=
ings. And
>> it doesn=E2=80=99t tell us immediately what to do about non-exact URL ma=
tches. Can
>> the client add query parameters and still use the token? What about path
>> segments? I like that this simple approach addresses some common
>> deployments that we already see today (see above), it=E2=80=99s not univ=
ersal. Do
>> we want or need a universal description language for directing where tok=
ens
>> go?
>>
>> This also opens up a whole new set of security questions. If the AS can
>> now direct the client where to use the token, could a rogue AS convince =
a
>> legit client to use a stolen token at the wrong RS? And what if the clie=
nt
>> ignores the directions from the AS entirely? Could this open up new aven=
ues
>> of attack?
>>
>> This is just the start, too. Things get even more complex if the client
>> can ask for multiple different kinds of resources at once. What if the A=
S
>> decides that the client needs a hyper-focused directed token for one par=
t
>> of the API, but can use a general token for other stuff? Can it signal t=
hat
>> to the client? And if it can, does that mean that all clients need to be
>> prepared for that kind of thing?
>>
>> I firmly believe that whatever we build in GNAP, we need to optimize for
>> the overwhelmingly common use case of a client getting a single access
>> token to call APIs that it already knows about. Anything we add on top o=
f
>> that really can=E2=80=99t get in the way of this, because if it does, th=
ere=E2=80=99s very
>> small chance that people will try to use this for everyday things. Keep =
the
>> simple things simple, and the complex things possible, after all.
>>
>> I=E2=80=99m really looking forward to hearing what the community thinks =
about
>> these use cases, and hopefully the people I=E2=80=99ve chatted with offl=
ine about
>> this can join the conversation and provide more light than I was able to=
.
>>
>> The two use cases which are considered above are:
>>
>> (1) The client knows what resource it=E2=80=99s calling, but it doesn=E2=
=80=99t know
>> where it=E2=80=99s hosted.
>> (2) The client knows what kind of thing it=E2=80=99s looking for, but do=
esn=E2=80=99t
>> know who to ask it from.
>>
>> That does not mean in any way that these two use cases should be solved
>> by placing the AS at the centre of the solution.
>>
>> Denis
>>
>>
>>  =E2=80=94 Justin
>>
>>
>> --
>> Txauth mailing list
>> Txauth@ietf.org
>> https://www.ietf.org/mailman/listinfo/txauth
>>
>>
>>
>> --
>> Txauth mailing list
>> Txauth@ietf.org
>> https://www.ietf.org/mailman/listinfo/txauth
>>
>
> This communication, including any attachments, is confidential. If you ar=
e not the intended recipient, you should not read it - please contact me im=
mediately, destroy it, and do not copy or use any part of this communicatio=
n or disclose anything about it. Thank you. Please note that this communica=
tion does not designate an information system for the purposes of the Elect=
ronic Transactions Act 2002.
>
>
> --
> Txauth mailing list
> Txauth@ietf.org
> https://www.ietf.org/mailman/listinfo/txauth
>

--0000000000001c580005a8fe36b2
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">While there are multiple reasons for bound tokens, each wi=
th their own needs, I strongly encourage an effort to create a single broad=
 spec that could address the common security issues. Tobias, this is the ge=
neral idea you were pushing on application level networking. As a general r=
ule, I believe=C2=A0that the current effort to base security on channel bin=
ding has already been extended beyond=C2=A0its capabilities. (That is the c=
oncept that the HTTPS key is used as the security for the messages.) So, ca=
n&#39;t we focus on the problem of identifying the participants to an exten=
ded set of interchanges. This would formalize the earlier statements that t=
he as and rs most likely have an ongoing=C2=A0security context on which to =
build subsequent interchanges.<br clear=3D"all"><div><div dir=3D"ltr" class=
=3D"gmail_signature" data-smartmail=3D"gmail_signature"><div dir=3D"ltr"><d=
iv>Peace ..tom</div></div></div></div><br></div><br><div class=3D"gmail_quo=
te"><div dir=3D"ltr" class=3D"gmail_attr">On Fri, Jun 26, 2020 at 6:23 AM J=
ustin Richer &lt;<a href=3D"mailto:jricher@mit.edu">jricher@mit.edu</a>&gt;=
 wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px =
0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div sty=
le=3D"overflow-wrap: break-word;">On Jun 25, 2020, at 9:07 PM, Tobias Looke=
r &lt;<a href=3D"mailto:tobias.looker@mattr.global" target=3D"_blank">tobia=
s.looker@mattr.global</a>&gt; wrote:<br><div><blockquote type=3D"cite"><br>=
<div><div dir=3D"ltr">I find this feature interesting and think it could be=
 an important=C2=A0pattern going=C2=A0forward to enable an AS to be able to=
 describe the utility of a token to the client, however as already pointed =
out in the thread I think there is some potential hidden complexity that wo=
uld need to be ironed out such that it does not make the simple things comp=
licated.<div><br></div><div>Justin, do you see this feature as something th=
e client has to explicitly request, i.e &quot;please give me access and ins=
tructions on how to use my access&quot; or rather that the AS would just re=
turn this information in conjunction with the access token if it had it ava=
ilable?</div><div><br></div></div></div></blockquote><div><br></div><div>Th=
is is something that I=E2=80=99d brought up as a possibility on the previou=
s thread =E2=80=94 something like a flag the client would set. This would b=
e especially important if the AS wants to return multiple access tokens but=
 the client requested 1, or the client requested N and the AS wants to retu=
rn M in response. Basically any time there=E2=80=99s a mismatch, that=E2=80=
=99s extra complexity on the client that I really don=E2=80=99t think we wa=
nt to be universal. A flag to turn that kind of direction and splitting on =
would be a potential start. But there are potential snags here too, and it =
comes down to how you manage the defaults...</div><br><blockquote type=3D"c=
ite"><div><div dir=3D"ltr"><div>&gt; This is just the start, too. Things ge=
t even more complex if the client can ask for multiple different kinds of r=
esources at once. What if the AS decides that the client needs a hyper-focu=
sed directed token for one part of the API, but can use a general token for=
 other stuff? Can it signal that to the client? And if it can, does that me=
an that all clients need to be prepared for that kind of thing?</div><div><=
br></div><div>Would a potential default be that if a client did for any rea=
son not support processing the additional information returned with the acc=
ess_token, just to ignore it? I think in the spirit of keeping the simple t=
hings simple, this potentially makes sense?</div></div></div></blockquote><=
div><br></div><div>That=E2=80=99s the real trick, if you ask me. It has to =
be :safe: for a client to ignore this information. Which means the AS can=
=E2=80=99t rely on the client =E2=80=9Cdoing the right thing=E2=80=9D with =
the information in the =E2=80=9Ctoken directions=E2=80=9D portion of the re=
sponse. Even setting aside the advanced and related =E2=80=9Csplit tokens=
=E2=80=9D idea above, we need to make sure that an AS/RS setup is built suc=
h that if the AS tells a client =E2=80=9Conly do X with your token=E2=80=9D=
 and the client does =E2=80=9CY=E2=80=9D, then there are other protections =
and practices in place to prevent things from going haywire if the client d=
oes =E2=80=9CY=E2=80=9D either by accident or through ignorance.=C2=A0</div=
><div><br></div><div>If OAuth 2 has taught us anything, it=E2=80=99s that c=
lient applications are going to be the laziest participants in the security=
 model. And that makes sense, really =E2=80=94 security isn=E2=80=99t what =
the client apps are trying to do, they=E2=80=99re trying to use the RS to d=
o something. So we need to make sure that whatever system we design will fa=
il on the safe side as much as possible, and keep things simple for the cli=
ent.</div><br><blockquote type=3D"cite"><div><div dir=3D"ltr"><div><br></di=
v><div>&gt; here are some worked out samples of this:</div><div><a href=3D"=
https://wiki.idesg.org/wiki/index.php/High_Assurance_AZ_Token" target=3D"_b=
lank">https://wiki.idesg.org/wiki/index.php/High_Assurance_AZ_Token</a></di=
v><div><a href=3D"https://mattrglobal.github.io/oidc-client-bound-assertion=
s-spec/" target=3D"_blank">https://mattrglobal.github.io/oidc-client-bound-=
assertions-spec/</a></div><div><div dir=3D"ltr"><div dir=3D"ltr"><div>Peace=
 ..tom</div><div><br></div><div>As one of the authors of those mentioned dr=
afts, I am interested in discussing that, but perhaps on a seperate thread?=
 As at least=C2=A0the bound assertion spec is=C2=A0primarily=C2=A0concerned=
 with binding mechanisms for the artifacts produced from an authorization f=
low (specifically identity claims), whereas I think directed access tokens =
is just more generally talking about whether GNAP should support an AS conv=
eying how to use an access_token it produces during a flow with a client.</=
div></div></div></div><div><br clear=3D"all"></div></div></div></blockquote=
><div><br></div><div>I think that these are separate issues as well.</div><=
div><br></div><div>=C2=A0=E2=80=94 Justin</div><br><blockquote type=3D"cite=
"><div><div dir=3D"ltr"><div><div><div dir=3D"ltr"><div dir=3D"ltr">Thanks,=
<br><table width=3D"auto" cellpadding=3D"0" cellspacing=3D"0" border=3D"0" =
style=3D"font-family:Times;font-size:inherit;border:0px"><tbody><tr style=
=3D"font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-=
size:11px;line-height:16px"><td width=3D"125" valign=3D"top"><a href=3D"htt=
ps://mattr.global/" style=3D"border:none;color:rgb(15,173,225)" target=3D"_=
blank"><img src=3D"https://mattr.global/assets/images/MattrLogo.png" alt=3D=
"Mattr website" width=3D"125" height=3D"125" style=3D"height: auto;"></a></=
td><td width=3D"16">=C2=A0</td><td width=3D"159" valign=3D"top" style=3D"co=
lor:rgb(51,49,50);font-size:12px"><table cellpadding=3D"0" cellspacing=3D"0=
" border=3D"0" style=3D"border:0px"><tbody><tr style=3D"font-family:&quot;H=
elvetica Neue&quot;,Helvetica,Arial,sans-serif;font-size:11px;line-height:1=
6px"><td><strong style=3D"font-size:12px">Tobias Looker</strong><br></td></=
tr><tr style=3D"font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans=
-serif;font-size:11px;line-height:16px"><td style=3D"line-height:16px">Matt=
r</td></tr><tr style=3D"font-family:&quot;Helvetica Neue&quot;,Helvetica,Ar=
ial,sans-serif;font-size:11px;line-height:16px"><td style=3D"line-height:16=
px;padding-top:12px">+64 (0) 27 378 0461<br><a href=3D"mailto:tobias.looker=
@mattr.global" style=3D"border:none;color:rgb(51,49,50)" target=3D"_blank">=
tobias.looker@mattr.global</a></td></tr><tr style=3D"font-family:&quot;Helv=
etica Neue&quot;,Helvetica,Arial,sans-serif;font-size:11px;line-height:16px=
"><td style=3D"font-size:12px;padding-top:12px"><table cellpadding=3D"0" ce=
llspacing=3D"0" border=3D"0" style=3D"border:0px"><tbody><tr style=3D"font-=
family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-size:11px=
;line-height:16px"><td width=3D"40"><a href=3D"https://mattr.global/" style=
=3D"border:none;color:rgb(51,49,50);margin-right:12px" target=3D"_blank"><i=
mg src=3D"https://mattr.global/assets/images/website.png" alt=3D"Mattr webs=
ite" width=3D"24" style=3D"border: 0px; height: 40px; width: 24px;"></a></t=
d><td width=3D"40"><a href=3D"https://www.linkedin.com/company/mattrglobal"=
 style=3D"border:none;color:rgb(51,49,50);margin-right:12px" target=3D"_bla=
nk"><img src=3D"https://mattr.global/assets/images/linkedin.png" alt=3D"Mat=
tr on LinkedIn" width=3D"24" style=3D"border: 0px; height: 40px; width: 24p=
x;"></a></td><td width=3D"40"><a href=3D"https://twitter.com/mattrglobal" s=
tyle=3D"border:none;color:rgb(51,49,50);margin-right:12px" target=3D"_blank=
"><img src=3D"https://mattr.global/assets/images/twitter.png" alt=3D"Mattr =
on Twitter" width=3D"24" style=3D"border: 0px; height: 40px; width: 24px;">=
</a></td><td width=3D"40"><a href=3D"https://github.com/mattrglobal" style=
=3D"border:none;color:rgb(51,49,50);margin-right:12px" target=3D"_blank"><i=
mg src=3D"https://mattr.global/assets/images/github.png" alt=3D"Mattr on Gi=
thub" width=3D"24" style=3D"border: 0px; height: 40px; width: 24px;"></a></=
td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table=
><br style=3D"font-family:Times;font-size:inherit"><small style=3D"color:rg=
b(118,118,118);font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-=
serif;font-size:8px;line-height:14px">This communication, including any att=
achments, is confidential. If you are not the intended recipient, you shoul=
d not read it - please contact me immediately, destroy it, and do not copy =
or use any part of this communication or disclose anything about it. Thank =
you. Please note that this communication does not designate an information =
system for the purposes of the Electronic Transactions Act 2002.</small><br=
></div></div></div><br></div></div><br><div class=3D"gmail_quote"><div dir=
=3D"ltr" class=3D"gmail_attr">On Wed, Jun 24, 2020 at 10:14 PM Denis &lt;<a=
 href=3D"mailto:denis.ietf@free.fr" target=3D"_blank">denis.ietf@free.fr</a=
>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px=
 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
 =20
   =20
 =20
  <div>
    <div>Justin, I fear we are still far away
      from an agreement about what this BoF should do.</div>
    <div><br>
    </div>
    <div>Tom Jones is saying &quot; I am getting
      tired of the whack-a-mole approach ...&quot;</div>
    <div><br>
    </div>
    I don&#39;t agree with you when you write: &quot;I think it=E2=80=99s g=
oing to be
    overwhelmingly common that a given RS is going to trust exactly one
    AS <br>
    <div>that it knows about ahead of time&quot;.
      Such an architecture would have exactly the same limitations as
      OAuth 2.0. and would not be scalable.</div>
    <div><br>
    </div>
    <div>
      <div>Before we start, we should have a
        clear view of the whole picture rather than starting from one
        scenario and expanding it in many different directions.</div>
      <div>For building an architecture, a
        pre-requirement is to define ALL the trust relationships. I
        don&#39;t believe that we have an agreement at this time on what <b=
r>
        these trust relationships are. </div>
    </div>
    <div><br>
    </div>
    <div>You are also using the following
      wording: &quot;methods for the AS and RS to communicate what the
      token=E2=80=99s good for&quot;. <br>
      With such a paradigm, it would be impossible to protect the user&#39;=
s
      privacy. <br>
    </div>
    <div><br>
    </div>
    <div>A key question is : Will GNAP take care
      of the user&#39;s privacy or will GNAP <b>prevent </b>to take care
      of the user&#39;s privacy ?</div>
    <div><br>
    </div>
    <div>About &quot;the ability for the client to
      get several access tokens to get different resources from one
      request&quot; is indeed a complex case.</div>
    <div><br>
    </div>
    <div>No one (including ASs) is able to
      predict in advance which access tokens will be needed, since they
      depend upon the kind of operation(s) <br>
      the client will be willing to perform. For privacy reasons, ASs
      should be kept ignorant of all the operations that a client is
      going to perform <br>
      on one or more resource servers. I believe that every effort
      should be made to avoid the AS to be in a position to be able to
      trace the operations <br>
      performed by its clients on various RSs.</div>
    <div><br>
    </div>
    <div>To handle the complex case you
      envision, the full workflow of operations needs to be considered
      with a detailed focus on the time <br>
      at which the user&#39;s <b>consent and choice</b> happens (<i>consent
        and choice</i> is the first privacy principle from ISO 29100).</div=
>
    <div><br>
    </div>
    <div>First of all, an access token could be
      targeted to a service rather than to a server. This would already
      solve many cases.</div>
    <div><br>
    </div>
    <div>When a RS needs to call another RS
      (which does not support the same service) then the client should
      be informed by the first RS.</div>
    <div>His &quot;consent and choice&quot; should then be
      obtained by the first RS and, when the user agrees, the client
      should then ask an access token <br>
      to one of the ASs trusted by the second RS in order to perform the
      subsequent operation.=C2=A0 <br>
    </div>
    <div><br>
    </div>
    <div>Denis</div>
    <div><br>
    </div>
    <div>PS.=C2=A0 In an email sent on June 23 you
      wrote: &quot; I think an on-device AS is an important use case&quot;.=
=C2=A0 I am
      sorry, but I don&#39;t understand.<br>
      =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 However, I do understand what &q=
uot;a server-based AS&quot; is.<br>
    </div>
    <div><br>
    </div>
    <div><br>
    </div>
    <blockquote type=3D"cite">
     =20
      Denis, thanks for the great comments. I think that your trust
      model is pretty different from what I=E2=80=99d laid out initially, a=
nd
      while it=E2=80=99s an interesting and important one, it is not what I
      meant by =E2=80=9Cmultiple access tokens=E2=80=9D in my discussion be=
low. I think
      that might be the cause of some disconnect here, but that doesn=E2=80=
=99t
      mean it=E2=80=99s out of reach for what the WG is after.
      <div><br>
      </div>
      <div>When I refer to multiple access tokens, and what the
        charter calls out as multiple access tokens, is the ability for
        the client to get several access tokens to get different
        resources from one request. I personally see this as an
        optimization of a specific set of use cases, some of which I
        discussed in my original email. There are others, I=E2=80=99m sure,=
 but
        all the ones I=E2=80=99ve seen are around the client needing to get
        several different kinds of access through an AS.=C2=A0<br>
        <div><br>
        </div>
        <div>I think it=E2=80=99s going to be overwhelmingly common
          that a given RS is going to trust exactly one AS that it knows
          about ahead of time. But for RS=E2=80=99s that can trust multiple
          AS=E2=80=99s, then we should have a model that can accommodate th=
at as
          well. That=E2=80=99s why the charter calls out methods for the AS=
 and
          RS to communicate what the token=E2=80=99s good for. I think the =
basis
          of those methods is going to start with a common token model,
          and likely incorporate into things like token formats and
          introspection-style token APIs.=C2=A0</div>
        <div><br>
        </div>
        <div>=C2=A0=E2=80=94 Justin<br>
          <div><br>
            <blockquote type=3D"cite">
              <div>On Jun 22, 2020, at 3:55 AM, Denis &lt;<a href=3D"mailto=
:denis.ietf@free.fr" target=3D"_blank">denis.ietf@free.fr</a>&gt;
                wrote:</div>
              <br>
              <div>
                <div style=3D"font-family:Helvetica;font-size:12px;font-sty=
le:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal=
;text-align:start;text-indent:0px;text-transform:none;white-space:normal;wo=
rd-spacing:0px;text-decoration:none">Hello Justin,</div>
                <div style=3D"font-family:Helvetica;font-size:12px;font-sty=
le:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal=
;text-align:start;text-indent:0px;text-transform:none;white-space:normal;wo=
rd-spacing:0px;text-decoration:none"><br>
                </div>
                <div style=3D"font-family:Helvetica;font-size:12px;font-sty=
le:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal=
;text-align:start;text-indent:0px;text-transform:none;white-space:normal;wo=
rd-spacing:0px;text-decoration:none">A few comments between the lines.</div=
>
                <div style=3D"font-family:Helvetica;font-size:12px;font-sty=
le:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal=
;text-align:start;text-indent:0px;text-transform:none;white-space:normal;wo=
rd-spacing:0px;text-decoration:none"><br>
                </div>
                <blockquote type=3D"cite" style=3D"font-family:Helvetica;fo=
nt-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;=
letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;=
white-space:normal;word-spacing:0px;text-decoration:none">One of the most i=
mportant aspects to
                  GNAP is going to be an ability to address things that
                  OAuth 2 can=E2=80=99t, or at least can=E2=80=99t do witho=
ut
                  significant gymnastics. So with that, I wanted to
                  bring back a use case discussion that originally came
                  up while we were talking about the possibility of
                  multiple access tokens, a few months back. I don=E2=80=99=
t
                  know if this concept has a regular term, so I=E2=80=99m g=
oing
                  to call it =E2=80=9Cdirected access tokens=E2=80=9D until=
 we come up
                  with something better =E2=80=94 assuming we decide this i=
s
                  worthwhile.<span>=C2=A0</span><br>
                </blockquote><p style=3D"font-family:Helvetica;font-size:12=
px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spa=
cing:normal;text-align:start;text-indent:0px;text-transform:none;white-spac=
e:normal;word-spacing:0px;text-decoration:none">I don&#39;t
                  understand what may mean &quot;directed access tokens=E2=
=80=9D but
                  I understand what means &quot;multiple access tokens&quot=
;.<span>=C2=A0</span><br>
                  When speaking of &quot;multiple access tokens&quot;, thes=
e
                  access tokens may come from one or more ASs.<br>
                </p>
                <blockquote type=3D"cite" style=3D"font-family:Helvetica;fo=
nt-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;=
letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;=
white-space:normal;word-spacing:0px;text-decoration:none">
                  <div>In OAuth, the client=E2=80=99s supposed to
                    always know where to send its access token, and that
                    knowledge is completely outside the protocol. This
                    makes a lot of sense for many (if not most)
                    deployments, as OAuth is really there to enable the
                    API access that the client already knows about.</div>
                  <div><br>
                  </div>
                  <div>But we=E2=80=99re now in a world where a client
                    could be talking to a generic API that could be
                    deployed at a number of different places, or a cloud
                    deployment that the AS wants to be able to dispatch
                    the client to.<span>=C2=A0</span></div>
                </blockquote><p style=3D"font-family:Helvetica;font-size:12=
px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spa=
cing:normal;text-align:start;text-indent:0px;text-transform:none;white-spac=
e:normal;word-spacing:0px;text-decoration:none">As soon the AS
                  is placed (again) at the centre of the model, the AS
                  will have the ability to act as &quot;Big Brother&quot;.<=
br>
                  OAuth 2.0 has not taken care of privacy issues. On the
                  contrary, GNAP should take care of them.</p>
                <blockquote type=3D"cite" style=3D"font-family:Helvetica;fo=
nt-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;=
letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;=
white-space:normal;word-spacing:0px;text-decoration:none">
                  <div>In order to do this, the AS needs to be
                    able to communicate to the client not only the token
                    information (and any related key and presentation
                    information), but also a set of<span>=C2=A0</span><i>di=
rections</i>=C2=A0about
                    what that specific token is good for. This needs to
                    be information outside the token itself, since
                    I=C2=A0believe we want to keep OAuth 2=E2=80=99s featur=
e of
                    having the token be opaque to the client. Note:
                    while we could map all of these to different
                    resource requests (in XYZ parlance) or scopes (in
                    OAuth 2 legacy parlance) on the request side, this
                    isn=E2=80=99t enough to tell the client what to do with=
 the
                    token<span>=C2=A0</span><i>if it doesn=E2=80=99t know a=
lready</i>.=C2=A0</div>
                  <div><br>
                  </div>
                  <div>I know of two use cases already in the
                    wild, where people are addressing things using a mix
                    of existing standards and some proprietary
                    extensions to address things within their silos.
                    I=E2=80=99ll try to summarize here, but I know the folk=
s
                    I=E2=80=99ve been talking to about this are also on the=
 list
                    so hopefully they can chime in with more detail or
                    any corrections for something I=E2=80=99ve missed.=C2=
=A0</div>
                  <div><br>
                  </div>
                  <div>(1) The client knows what resource it=E2=80=99s
                    calling, but it doesn=E2=80=99t know where it=E2=80=99s=
 hosted.
                    Everything is in a single security domain controlled
                    by the AS,<span>=C2=A0</span></div>
                </blockquote><p style=3D"font-family:Helvetica;font-size:12=
px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spa=
cing:normal;text-align:start;text-indent:0px;text-transform:none;white-spac=
e:normal;word-spacing:0px;text-decoration:none">Speaking of
                  &quot;multiple access tokens&quot; is in contradiction wi=
th
                  single security domain &quot;controlled&quot; by an AS.<s=
pan>=C2=A0</span><br>
                  A user may need to demonstrate some of his identity
                  attributes granted e.g. by his bank but may also<span>=C2=
=A0</span><br>
                  need to demonstrate one or more diplomas granted by
                  one or more universities. The bank cannot be<span>=C2=A0<=
/span><br>
                  the &quot;primary issuer&quot; of a university diploma. I=
t
                  should not be either a &quot;secondary issuer&quot;, beca=
use<span>=C2=A0</span><br>
                  the bank does not &quot;<i>need to know&quot;</i><span>=
=C2=A0</span>what are the
                  diplomas of the user.<br>
                </p>
                <blockquote type=3D"cite" style=3D"font-family:Helvetica;fo=
nt-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;=
letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;=
white-space:normal;word-spacing:0px;text-decoration:none">
                  <div>but the AS needs to decide at runtime
                    which specific instance of the API to direct the
                    client to. Since things are closely tied together,
                    the client just needs to effectively known an
                    identifier for the RS, and this is currently
                    implemented as a URI. Once the client has that
                    identifier, it knows how to dispatch that token to
                    that instance of the RS.</div>
                </blockquote><p style=3D"font-family:Helvetica;font-size:12=
px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spa=
cing:normal;text-align:start;text-indent:0px;text-transform:none;white-spac=
e:normal;word-spacing:0px;text-decoration:none">There is no good
                  reason why the AS should be involved in that step.<span>=
=C2=A0</span><br>
                  OAuth 2.0 is/was implicitly mandating a strong
                  relationship between ASs and RSs which makes it non
                  scalable.<br>
                  GNAP should be based on a simple trust relationship :
                  a given RS trusts some ASs for access tokens that
                  contains some types of attributes.<br>
                  An AS should not need to know in advance (or even at
                  the time of an access token request) the RSs that are
                  trusting it.<br>
                </p><p style=3D"font-family:Helvetica;font-size:12px;font-s=
tyle:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:norm=
al;text-align:start;text-indent:0px;text-transform:none;white-space:normal;=
word-spacing:0px;text-decoration:none">A client could
                  first talk to a &quot;global service provider&quot; which=
 has
                  the knowledge of the different RSs affiliated to it.<span=
>=C2=A0</span><br>
                </p>
                <blockquote type=3D"cite" style=3D"font-family:Helvetica;fo=
nt-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;=
letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;=
white-space:normal;word-spacing:0px;text-decoration:none">
                  <div>(2) The client knows what kind of thing
                    it=E2=80=99s looking for, but doesn=E2=80=99t know who =
to ask it
                    from.<span>=C2=A0</span></div>
                </blockquote><p style=3D"font-family:Helvetica;font-size:12=
px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spa=
cing:normal;text-align:start;text-indent:0px;text-transform:none;white-spac=
e:normal;word-spacing:0px;text-decoration:none">Once again, the
                  client could first talk to a &quot;global service provide=
r&quot;
                  which has the knowledge of the different RSs
                  affiliated to it.<span>=C2=A0</span></p>
                <blockquote type=3D"cite" style=3D"font-family:Helvetica;fo=
nt-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;=
letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;=
white-space:normal;word-spacing:0px;text-decoration:none">
                  <div>There=E2=80=99s a cross-domain trust that=E2=80=99s
                    bridged by the AS, and the AS needs to dispatch to
                    different resources depending on which user logged
                    in (and possibly what the user consented to). To
                    make things more concrete, the client needs to get
                    driver=E2=80=99s license information, but doesn=E2=80=
=99t know ahead
                    of time which of the many state/provincial bureaus
                    to call to get that information because it doesn=E2=80=
=99t
                    know yet who the user is.<span>=C2=A0</span></div>
                </blockquote><p style=3D"font-family:Helvetica;font-size:12=
px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spa=
cing:normal;text-align:start;text-indent:0px;text-transform:none;white-spac=
e:normal;word-spacing:0px;text-decoration:none">When a user has
                  a driving license, he knows its issuer. The user can
                  then provide some hint to the client.</p>
                <blockquote type=3D"cite" style=3D"font-family:Helvetica;fo=
nt-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;=
letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;=
white-space:normal;word-spacing:0px;text-decoration:none">
                  <div>The AS will know who the user is once
                    they log in and approve things, and so it can direct
                    the client to call the correct RS. Since this is a
                    relatively simple API with a pre-negotiated
                    cross-domain trust, the AS returns a URL that the
                    client presents the token at.<span>=C2=A0</span><br>
                  </div>
                </blockquote><p style=3D"font-family:Helvetica;font-size:12=
px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spa=
cing:normal;text-align:start;text-indent:0px;text-transform:none;white-spac=
e:normal;word-spacing:0px;text-decoration:none">=C2=A0A single AS
                  should not be aware of all the attributes a user has.<spa=
n>=C2=A0</span><br>
                </p>
                <blockquote type=3D"cite" style=3D"font-family:Helvetica;fo=
nt-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;=
letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;=
white-space:normal;word-spacing:0px;text-decoration:none">
                  <div><br>
                  </div>
                  <div>As far as I know, in both of these
                    cases, the token is only good for that API and not
                    others =E2=80=94 but more on that later.</div>
                  <div><br>
                  </div>
                  <div>A simple thing to do is just give back a
                    URL with the access token, which tells the client
                    where to go.=C2=A0</div>
                  <div><br>
                  </div>
                  <div><span style=3D"white-space:pre-wrap">	</span>{</div>
                  <div><span style=3D"white-space:pre-wrap">		</span>=E2=80=
=9Caccess_token=E2=80=9D:
                    {</div>
                  <div><span style=3D"white-space:pre-wrap">			</span>=E2=
=80=9Cvalue=E2=80=9D:
                    =E2=80=9C87yui843yfer=E2=80=9D,</div>
                  <div><span style=3D"white-space:pre-wrap">			</span>=E2=
=80=9Cresource_uri=E2=80=9D:
                    =E2=80=9C<a href=3D"https://example/foo" target=3D"_bla=
nk">https://example/foo</a>&quot;</div>
                  <div><span style=3D"white-space:pre-wrap">		</span>}</div=
>
                  <div><span style=3D"white-space:pre-wrap">	</span>}</div>
                  <div><br>
                  </div>
                  <div>This is good for some kinds of APIs, but
                    it=E2=80=99s limiting because not all APIs dispatch bas=
ed on
                    the URL. An AS might want to divvy up access tokens
                    to an API that=E2=80=99s keyed on headers, or verbs, or=
 any
                    number of things. And it doesn=E2=80=99t tell us immedi=
ately
                    what to do about non-exact URL matches. Can the
                    client add query parameters and still use the token?
                    What about path segments? I like that this simple
                    approach addresses some common deployments that we
                    already see today (see above), it=E2=80=99s not univers=
al.
                    Do we want or need a universal description language
                    for directing where tokens go?</div>
                  <div><br>
                  </div>
                  <div>This also opens up a whole new set of
                    security questions. If the AS can now direct the
                    client where to use the token, could a rogue AS
                    convince a legit client to use a stolen token at the
                    wrong RS? And what if the client ignores the
                    directions from the AS entirely? Could this open up
                    new avenues of attack?</div>
                  <div><br>
                  </div>
                  <div>This is just the start, too. Things get
                    even more complex if the client can ask for multiple
                    different kinds of resources at once. What if the AS
                    decides that the client needs a hyper-focused
                    directed token for one part of the API, but can use
                    a general token for other stuff? Can it signal that
                    to the client? And if it can, does that mean that
                    all clients need to be prepared for that kind of
                    thing?</div>
                  <div><br>
                  </div>
                  <div>I firmly believe that whatever we build
                    in GNAP, we need to optimize for the overwhelmingly
                    common use case of a client getting a single access
                    token to call APIs that it already knows about.
                    Anything we add on top of that really can=E2=80=99t get=
 in
                    the way of this, because if it does, there=E2=80=99s ve=
ry
                    small chance that people will try to use this for
                    everyday things. Keep the simple things simple, and
                    the complex things possible, after all.</div>
                  <div><br>
                  </div>
                  <div>I=E2=80=99m really looking forward to hearing
                    what the community thinks about these use cases, and
                    hopefully the people I=E2=80=99ve chatted with offline =
about
                    this can join the conversation and provide more
                    light than I was able to.</div>
                </blockquote><p style=3D"font-family:Helvetica;font-size:12=
px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spa=
cing:normal;text-align:start;text-indent:0px;text-transform:none;white-spac=
e:normal;word-spacing:0px;text-decoration:none">The two use
                  cases which are considered above are:</p>
                <blockquote style=3D"font-family:Helvetica;font-size:12px;f=
ont-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing=
:normal;text-align:start;text-indent:0px;text-transform:none;white-space:no=
rmal;word-spacing:0px;text-decoration:none"><p>(1) The client knows what re=
source it=E2=80=99s
                    calling, but it doesn=E2=80=99t know where it=E2=80=99s=
 hosted.<br>
                    (2) The client knows what kind of thing it=E2=80=99s lo=
oking
                    for, but doesn=E2=80=99t know who to ask it from.<span>=
=C2=A0</span><br>
                  </p>
                </blockquote><p style=3D"font-family:Helvetica;font-size:12=
px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spa=
cing:normal;text-align:start;text-indent:0px;text-transform:none;white-spac=
e:normal;word-spacing:0px;text-decoration:none">That does not
                  mean in any way that these two use cases should be
                  solved by placing the AS at the centre of the
                  solution.</p><p style=3D"font-family:Helvetica;font-size:=
12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-s=
pacing:normal;text-align:start;text-indent:0px;text-transform:none;white-sp=
ace:normal;word-spacing:0px;text-decoration:none">Denis</p>
                <blockquote type=3D"cite" style=3D"font-family:Helvetica;fo=
nt-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;=
letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;=
white-space:normal;word-spacing:0px;text-decoration:none">
                  <div><br>
                  </div>
                  <div>=C2=A0=E2=80=94 Justin</div>
                  <br>
                  <fieldset></fieldset>
                </blockquote><p style=3D"font-family:Helvetica;font-size:12=
px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spa=
cing:normal;text-align:start;text-indent:0px;text-transform:none;white-spac=
e:normal;word-spacing:0px;text-decoration:none"><br>
                </p>
                <span style=3D"font-family:Helvetica;font-size:12px;font-st=
yle:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:norma=
l;text-align:start;text-indent:0px;text-transform:none;white-space:normal;w=
ord-spacing:0px;text-decoration:none;float:none;display:inline">--<span>=C2=
=A0</span></span><br style=3D"font-family:Helvetica;font-size:12px;font-sty=
le:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal=
;text-align:start;text-indent:0px;text-transform:none;white-space:normal;wo=
rd-spacing:0px;text-decoration:none">
                <span style=3D"font-family:Helvetica;font-size:12px;font-st=
yle:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:norma=
l;text-align:start;text-indent:0px;text-transform:none;white-space:normal;w=
ord-spacing:0px;text-decoration:none;float:none;display:inline">Txauth mail=
ing list</span><br style=3D"font-family:Helvetica;font-size:12px;font-style=
:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;t=
ext-align:start;text-indent:0px;text-transform:none;white-space:normal;word=
-spacing:0px;text-decoration:none">
                <a href=3D"mailto:Txauth@ietf.org" style=3D"font-family:Hel=
vetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weigh=
t:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transf=
orm:none;white-space:normal;word-spacing:0px" target=3D"_blank">Txauth@ietf=
.org</a><br style=3D"font-family:Helvetica;font-size:12px;font-style:normal=
;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-ali=
gn:start;text-indent:0px;text-transform:none;white-space:normal;word-spacin=
g:0px;text-decoration:none">
                <a href=3D"https://www.ietf.org/mailman/listinfo/txauth" st=
yle=3D"font-family:Helvetica;font-size:12px;font-style:normal;font-variant-=
caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-=
indent:0px;text-transform:none;white-space:normal;word-spacing:0px" target=
=3D"_blank">https://www.ietf.org/mailman/listinfo/txauth</a></div>
            </blockquote>
          </div>
          <br>
        </div>
      </div>
    </blockquote><p><br>
    </p>
  </div>

-- <br>
Txauth mailing list<br>
<a href=3D"mailto:Txauth@ietf.org" target=3D"_blank">Txauth@ietf.org</a><br=
>
<a href=3D"https://www.ietf.org/mailman/listinfo/txauth" rel=3D"noreferrer"=
 target=3D"_blank">https://www.ietf.org/mailman/listinfo/txauth</a><br>
</blockquote></div>

<br>
<pre style=3D"font-family:&quot;Courier New&quot;,Courier,monospace,arial,s=
ans-serif;margin-top:0px;margin-bottom:0px;white-space:pre-wrap;background-=
color:rgb(255,255,255);font-size:14px">This communication, including any at=
tachments, is confidential. If you are not the intended recipient, you shou=
ld not read it - please contact me immediately, destroy it, and do not copy=
 or use any part of this communication or disclose anything about it. Thank=
 you. Please note that this communication does not designate an information=
 system for the purposes of the Electronic Transactions Act 2002.</pre></di=
v></blockquote></div><br></div>-- <br>
Txauth mailing list<br>
<a href=3D"mailto:Txauth@ietf.org" target=3D"_blank">Txauth@ietf.org</a><br=
>
<a href=3D"https://www.ietf.org/mailman/listinfo/txauth" rel=3D"noreferrer"=
 target=3D"_blank">https://www.ietf.org/mailman/listinfo/txauth</a><br>
</blockquote></div>

--0000000000001c580005a8fe36b2--

