Re: [Txauth] The client is identified by its key.

Tom Jones <thomasclinganjones@gmail.com> Tue, 09 June 2020 17:52 UTC

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 3394B3A0C79 for <txauth@ietfa.amsl.com>; Tue, 9 Jun 2020 10:52:15 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.097
X-Spam-Level:
X-Spam-Status: No, score=-2.097 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, 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 6BzchbqmDo7X for <txauth@ietfa.amsl.com>; Tue, 9 Jun 2020 10:52:13 -0700 (PDT)
Received: from mail-oi1-x230.google.com (mail-oi1-x230.google.com [IPv6:2607:f8b0:4864:20::230]) (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 19EF43A0C6F for <txauth@ietf.org>; Tue, 9 Jun 2020 10:52:13 -0700 (PDT)
Received: by mail-oi1-x230.google.com with SMTP id 25so18642758oiy.13 for <txauth@ietf.org>; Tue, 09 Jun 2020 10:52:13 -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=5GRvfJHVe8P5ilpFrMGfjThmb3PuN25iTMJCF0OgqYM=; b=sC0LrDfBmA2/DbqikxaLIEz5sgkzpQ9ppBQZwBajszJ8bSmnxGeuQK8R3Fj9slb1BY OL6OE3NAnLMRn/Z7hfP7qFjkEhGB1MkcRwHx3yGjEX1wcrkzUYCxHrifQjQ1sYCI17jV VbXXwNMCNS9FAKiByIyZn7aY1uvGXpY1j231CzVzcqCQBWVDVz6Bc8VGw9GeTZKY0AnE mXz0kwJMGnLYofwket9h/XkRvwQ9EzF0xE1Nzgq8w+AzO+qGLlhVc28MW4vpj4z9Pwdh eY2BBkmO1YbGA66fxAqZxd6C5DMWAaIvDre+qeRq5+r9wgjHwNLEjTrstQL7wb9RkS9B yJoQ==
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=5GRvfJHVe8P5ilpFrMGfjThmb3PuN25iTMJCF0OgqYM=; b=fyMM6WAi80wnzrDVtAXTlqgUiQQXIq6l+QRYIDrnNazBd4x3LaBhk4ajIdWpy5lEmL +lQ9c0Xr1Rs2os5/6SvhY658aSt5DaQx9FbBIntzcy63NL+EkEyTetNZjR49daom1zyS ZhSnquuvdmfdd7pzjupxM1MM9YqzCEelXb/bKUKyRgGKJAtkAfzuKYkUhBH8SSZu2uXP +VOalsdAIXwrPhPdLQxphUb+A9S+1toHY3XKXe6MDvXZjCphkxx8QqTvwT6ySy/+N5XH LjuZflK9br374WR5d8WF4Umntu+V8NlagMqJB9Z3Jf9CCuzoBEZvUAC9P1foqujEbGsP r3oA==
X-Gm-Message-State: AOAM532yGhXQlXQZ06yBCC+Zt4IiJz2rn4+Xx+Q66XK/TeI0rHJE/vJr GgV7lzwsXaPKzn4NJKEMm+bDDnbt6TETsKWUYmY=
X-Google-Smtp-Source: ABdhPJzpjw6qMd/CNrFU5PrXpps03vw8LRZcRznPmQfp/7l2Ex7IcQTx724Qu5cUPDZhCj646+JxVQ2kytddo3rP5V0=
X-Received: by 2002:aca:554c:: with SMTP id j73mr4677246oib.172.1591725132219; Tue, 09 Jun 2020 10:52:12 -0700 (PDT)
MIME-Version: 1.0
References: <CAK2Cwb4vue-VRhC7x+DTM2UFrrLM3qdYXHfYJnV71Tqx6Wqm8w@mail.gmail.com> <41E7211B-6599-463F-896C-A88EFF904921@mit.edu>
In-Reply-To: <41E7211B-6599-463F-896C-A88EFF904921@mit.edu>
From: Tom Jones <thomasclinganjones@gmail.com>
Date: Tue, 09 Jun 2020 10:51:59 -0700
Message-ID: <CAK2Cwb7qoQfJXy460vgUMw37z1t6=W+iy56pC68s9BJo2h_mzg@mail.gmail.com>
To: Justin Richer <jricher@mit.edu>
Cc: txauth@ietf.org
Content-Type: multipart/alternative; boundary="000000000000160a1705a7aa6303"
Archived-At: <https://mailarchive.ietf.org/arch/msg/txauth/xRwKLlZ5Q-xzEvL8shcqNG8w9qI>
Subject: Re: [Txauth] The client is identified by its key.
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: Tue, 09 Jun 2020 17:52:15 -0000

That is feel good description.  I am skeptical until a full description of
the protocol exists. Even then i don't believe it works until i see it work
for myself. If the roll-over is to be in the IETF spec then it requires two
implementations. If it is not in the spec, then I would oppose adoption of
the spec. Until i see some evidence that it works, I would not like to see
it adopted. Otherwise we will get deployments that work fine for a year and
then all start to fai. I've been there, that is not fun.

Peace ..tom


On Tue, Jun 9, 2020 at 10:38 AM Justin Richer <jricher@mit.edu> wrote:

> Key rollover is really important. When I say that the client is identified
> by the key, I do not mean that a client is DEFINED by its key. And with
> that, it is important to know that it’s the AS that decides what any
> particular key represents at any time. So long as the AS knows which key to
> map to which set of policies that govern the actions of a client,
> everything is fine. That mapping can change and the AS can keep the new key
> tied to the same internal entity. The AS could even have multiple keys tied
> to that entity, and accept any of those keys during a request.
>
> It’s exactly the same as changing a deployed OAuth 2 client’s
> client_secret today. You change the secret on the AS and change it in the
> client and it just keeps working like you’d expect.
>
> Oh, but you might be thinking — there we have the client ID to tie it all
> together! Don’t we need that! Well, we actually don’t. The AS can keep
> whatever internal identifier it wants to during a client rollover. The
> protocol, and importantly the client itself, need never be aware of that
> identifier. It might still be there but you are no longer forced to expose
> it.
>
> Removing an external and explicit client identifier enables this kind of
> deployment behavior, it doesn’t hamper it.
>
>  — Justin
>
> On Jun 9, 2020, at 12:38 PM, Tom Jones <thomasclinganjones@gmail.com>
> wrote:
>
> *This needs to be its own thread. I see the same trend in OpenID for
> self-issued subject identification. I cannot imagine how key roll-over
> could possibly work without major disruption to ongoing activity.  Someone
> must show that key rollover in a fully functioning system is possible
> before it is even considered.*
>
> *from justin*
>
> *The client is identified by its key.* There is no external client
> identifier. I think you’re confused because you’re still thinking in terms
> of OAuth 2’s client ID based model and I am trying to move us past that. It
> took me time to realize that we really can let it go, so hopefully this is
> helpful in explaining why.
>
> When a credential is cryptographically random enough to be unique, it can
> be used as its own identifier, particularly when you don’t need to identify
> the entity outside of the context that it can present and prove its
> credential. To stretch a metaphor, passwords don’t always need usernames.
> This is, after all, the driving design pattern behind OAuth access tokens.
> An access token doesn’t have a “username” portion to it, even though it
> would have been trivial to require the client to send its client ID
> alongside the access token. Why does that work? Because our model of what
> the RS does with the access token is built around it answering the
> questions: is this token valid and does it allow what’s being requested? If
> the RS needs to know which client was issued the token, it can discover
> that information without being told separately from the token -- perhaps
> it’s in the token itself or it’s in an introspection response. And in a lot
> of cases, the RS doesn’t care about the client software, it just wants to
> know if the token’s any good. Even in constrained tokens such as MTLS, PoP,
> and DPoP, we aren’t really authenticating the client at the RS so much as
> making sure the right key is presented alongside the right token.
>
> XYZ takes that same approach with the client talking to the AS and uses
> the credential (key) to identify the client as well as authenticate and
> protect the request. We can’t just say “OAuth 2 had client IDs and people
> are used to it so it must be good and we have to keep using it”. We need to
> ask WHY OAuth 2 needs client IDs and if that still makes sense. I argue
> that it doesn’t make sense anymore and we need to step back and look at a
> better model. OAuth 2 needs a client ID because it gets passed in the front
> channel and the client’s credentials can’t be used there. The access token
> doesn’t need an equivalent because it’s passed in the back channel and can
> be used directly. Now that the client no longer needs to be identified, but
> not authenticated, through untrusted third parties (such as the browser),
> we don’t need to have a separate identifier as part of the protocol. With
> an intent-based protocol, that starts in the back channel, you don’t need a
> client identifier anymore. Once the AS finds that key, the AS can then
> figure out what policies, rights, and restrictions are attached to that
> key. In many implementations, there’s going to be some kind of “registered
> client” object in a database somewhere that drives those policies. That’s
> the classical OAuth model, and it works in many cases. But in other cases,
> the key is going to just be a value used to protect the request chain (and
> possibly the token itself), and the policy is going to be built up by other
> things like a device posture or signature on the calling software or
> verified user information. It’s not just about client authentication, even
> though it can be used for it. DPoP, PKCE, and DynReg have shown us the
> value in dynamic systems, in different ways.
>
> On top of that, PAR is showing us that a lot of the constraints that we
> have in OAuth 2 don’t really apply anymore. For instance, Redirect URI
> restrictions can be relaxed because now you CAN identify and authenticate
> the software sending it, which isn’t true with a front-channel-first
> approach. All of the things that are required in OAuth 2 start to become
> redundant, and it leads to things like requiring that “client_id” still
> always be passed in the front channel even though the information could be
> looked up from an internal request_uri reference using PAR and JAR together.
>
> That’s why a key handle isn’t exactly the same as a client ID and I did
> not call it a client ID in the XYZ protocol. It’s a shortcut to refer to
> the key material for certain optimized cases, but ultimately it’s pointing
> to a key. This has an interesting and beneficial side effect — if you HAVE
> a client ID as part of your internal data model, it can FUNCTION as a key
> handle because it’s a unique value the AS can use to look up key
> information. It’s not “authenticating the client”, it’s pointing to a key
> which in turn identifies and authenticates the software making the call.
> The fact that it’s a “client ID” is an artifact of the implementation,
> which in this case has an OAuth 2 legacy to work with.
>
> If we’re going to move past the constraints of OAuth 2 we need to stop
> thinking so strictly in its terms and models. There are better ways to
> approach this now and client IDs are not required by this protocol model.
> Peace ..tom
> --
> Txauth mailing list
> Txauth@ietf.org
> https://www.ietf.org/mailman/listinfo/txauth
>
>
>