Re: [Gen-art] Gen-ART Last Call review of draft-ietf-ace-dtls-authorize-12

Paul Kyzivat <pkyzivat@alum.mit.edu> Fri, 11 September 2020 20:49 UTC

Return-Path: <pkyzivat@alum.mit.edu>
X-Original-To: gen-art@ietfa.amsl.com
Delivered-To: gen-art@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 295B93A097A; Fri, 11 Sep 2020 13:49:10 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.949
X-Spam-Level:
X-Spam-Status: No, score=-2.949 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, NICE_REPLY_A=-0.948, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=alum.mit.edu
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 2pI38CqehiRp; Fri, 11 Sep 2020 13:49:07 -0700 (PDT)
Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2077.outbound.protection.outlook.com [40.107.237.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 886AD3A0977; Fri, 11 Sep 2020 13:49:07 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XRjVnV8u9gyKXb+GWZUmjiqsem97mz4HXOk4p6slQCiu9VmfAc9pptRMqM3q/ZRpUmgI4MKOCQEwZFFOL03dhzjt2LPkrKyfqsl0bbcAB/pWuX7d13H54y2OIW9ABSbR5PA0aLaeikI144+T1I6L/aAIijAa3S3LtSiKlBQNAZAFKCRhDvw/WP2DV00HhcY3J2lp7pLdQc5Ig7U3H6Bcw5Ek5S9vfNZK6lIyiOf4a/O+8F5qWUs9PpjQ/aOecdGqcdphQ6ySN8i2ZxaJ4G8owT7Mq3cfZtlrtgWcGRokC3LlaxiLo38sx365hGST5kgZD9+m4vGWBjiZlk5shpiebA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=b3NYcg52I+YRUBhaVb7KIsO8yrEtT9Du/CVvemTL/B8=; b=M7fts3FWGh4QEJkrLzNvzVg4407YzFOvcHLLUpXuf+AUlDwk3JUW6YOmigQIPG4/dYPGguuTJamrn6+uktI/AvhzuwRmiXasSr/LlPsbe28EO64DTb0gq8sIIuxedP/w680pyi7NpvyKsVvIhX11eb+r/7wcXsnIxAZFuXR/TK3EGGhh4Sxz9wfKFYqp9FVKFDRbEBuNLC+B67RUEWF/E5uQbrrmazmg3OQGJk1hgNFDYJVZ7LSYpISPev7GSPi2XXo/PQb5Gb+BkP33sju5DglB3wQB33eLjYT0WuwZwfb0Lh/E/o/tUpXWWH+79rsoPrM2FAVMBignIsx5rew2WQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 18.7.68.33) smtp.rcpttodomain=tzi.org smtp.mailfrom=alum.mit.edu; dmarc=bestguesspass action=none header.from=alum.mit.edu; dkim=none (message not signed); arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alum.mit.edu; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=b3NYcg52I+YRUBhaVb7KIsO8yrEtT9Du/CVvemTL/B8=; b=iLITFthCAT9Bm8yz02W15NG4nDVtT6HYCpF8XrLwPdkPL++P9cwOS8qR7seKqh1VgjRfLVah3OjqsIiDWBA/Rgcnoc0qRQOtyFlAviNb9S9JmidAmLiUuF1grjc/HVUOp69NEyB/uzPyTCgcUQRnl6SSPzguHFZvHP+uztvWIP8=
Received: from SN4PR0701CA0018.namprd07.prod.outlook.com (2603:10b6:803:28::28) by BN6PR12MB1202.namprd12.prod.outlook.com (2603:10b6:404:1c::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16; Fri, 11 Sep 2020 20:49:05 +0000
Received: from SN1NAM02FT031.eop-nam02.prod.protection.outlook.com (2603:10b6:803:28:cafe::d2) by SN4PR0701CA0018.outlook.office365.com (2603:10b6:803:28::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16 via Frontend Transport; Fri, 11 Sep 2020 20:49:05 +0000
X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 18.7.68.33) smtp.mailfrom=alum.mit.edu; tzi.org; dkim=none (message not signed) header.d=none;tzi.org; dmarc=bestguesspass action=none header.from=alum.mit.edu;
Received-SPF: Pass (protection.outlook.com: domain of alum.mit.edu designates 18.7.68.33 as permitted sender) receiver=protection.outlook.com; client-ip=18.7.68.33; helo=outgoing-alum.mit.edu;
Received: from outgoing-alum.mit.edu (18.7.68.33) by SN1NAM02FT031.mail.protection.outlook.com (10.152.72.116) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16 via Frontend Transport; Fri, 11 Sep 2020 20:49:04 +0000
Received: from Kokiri.localdomain (c-24-62-227-142.hsd1.ma.comcast.net [24.62.227.142]) (authenticated bits=0) (User authenticated as pkyzivat@ALUM.MIT.EDU) by outgoing-alum.mit.edu (8.14.7/8.12.4) with ESMTP id 08BKn12f014481 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Fri, 11 Sep 2020 16:49:02 -0400
To: Olaf Bergmann <bergmann@tzi.org>
Cc: draft-ietf-ace-dtls-authorize.all@ietf.org, General Area Review Team <gen-art@ietf.org>
References: <8c2725a3-f89f-7ea1-dda9-681edd463a32@alum.mit.edu> <87y2muo6ix.fsf@wangari> <87v9gomsf4.fsf@wangari>
From: Paul Kyzivat <pkyzivat@alum.mit.edu>
Message-ID: <b0e2088b-ab24-3d35-c98a-161955d3fc7a@alum.mit.edu>
Date: Fri, 11 Sep 2020 16:49:01 -0400
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:68.0) Gecko/20100101 Thunderbird/68.12.0
MIME-Version: 1.0
In-Reply-To: <87v9gomsf4.fsf@wangari>
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Language: en-US
Content-Transfer-Encoding: 8bit
X-EOPAttributedMessage: 0
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: fda7a172-830f-4b20-f726-08d856941edb
X-MS-TrafficTypeDiagnostic: BN6PR12MB1202:
X-Microsoft-Antispam-PRVS: <BN6PR12MB120208EC12F74B7B0E49942CF9240@BN6PR12MB1202.namprd12.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:10000;
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: xrMgrXYT9Aiyzm3Hxnq4H6bbNu8UdR7EL9egHgw928wiHC++O5YqQkEv9K1t6tWRKOWmFHaOcKowxRXbTNDvTEuY0VvE2fwZOYtHvG7f3LuOzJVTFQ4C0HlfnokGZoaLWX6+Xf9BO2fdI+kgFRsq4rEGr/Ip8fZjplXyFyMgl5nHgAMFjkX/s1nHcEvWAhBjNFAeihpaLeLFIgHIVSe0NuwmVzJwgoZTM9LRV7z1upSy4uc2U/y3MIr90jJflJSpknzRj7yfD+GfGX7xDv/PrS7yxDcJ/31HfoWDWCETVMns1zbD3eGucghn4LGmy6GPzXyYSOX5LI9RW8dcm3Vkpmkc/BnweMhrmgixxprqMktOWgEgCOGEc4LBSafo6jlGEzdsR3CCdLQIbLQLU+qnWnrMXh4zgv9p8H3SPAFCHlUr8GknsIbAAN0fFX03l5U8iI5Ia2h8B6JtROv2iRrFzXTgChCWlKar7jIv82mH98Rmhvik17OUfs2XRl8ipkD9
X-Forefront-Antispam-Report: CIP:18.7.68.33; CTRY:US; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:outgoing-alum.mit.edu; PTR:outgoing-alum.mit.edu; CAT:NONE; SFS:(376002)(39860400002)(346002)(136003)(396003)(46966005)(6916009)(2616005)(336012)(966005)(53546011)(2906002)(956004)(30864003)(356005)(8936002)(75432002)(70206006)(186003)(83380400001)(70586007)(7596003)(316002)(31696002)(82310400003)(5660300002)(31686004)(86362001)(36906005)(4326008)(786003)(26005)(82740400003)(478600001)(47076004)(8676002)(43740500002); DIR:OUT; SFP:1101;
X-OriginatorOrg: alum.mit.edu
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Sep 2020 20:49:04.3726 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: fda7a172-830f-4b20-f726-08d856941edb
X-MS-Exchange-CrossTenant-Id: 3326b102-c043-408b-a990-b89e477d582f
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3326b102-c043-408b-a990-b89e477d582f; Ip=[18.7.68.33]; Helo=[outgoing-alum.mit.edu]
X-MS-Exchange-CrossTenant-AuthSource: SN1NAM02FT031.eop-nam02.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR12MB1202
Archived-At: <https://mailarchive.ietf.org/arch/msg/gen-art/Bk7DIdysovxkL6G6yeu5d4GRzSQ>
Subject: Re: [Gen-art] Gen-ART Last Call review of draft-ietf-ace-dtls-authorize-12
X-BeenThere: gen-art@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "GEN-ART: General Area Review Team" <gen-art.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/gen-art>, <mailto:gen-art-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/gen-art/>
List-Post: <mailto:gen-art@ietf.org>
List-Help: <mailto:gen-art-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/gen-art>, <mailto:gen-art-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 11 Sep 2020 20:49:10 -0000

On 9/8/20 7:14 AM, Olaf Bergmann wrote:
> Hi Paul,
> 
> I hope you are doing well. On request from Jim Schaad who acts as the
> document shepherd, we have submitted draft-ietf-ace-dtls-authorize-13
> including the changes proposed below. Please feel free to contact us if
> you do not agree with these proposals.

Thanks for addressing my comments. For the most part the changes address 
my concerns. My lack of any deep understanding of the subject material 
limits the extent that I can comprehend if my concerns have been 
sufficiently addressed. Further comments inline.

> Grüße
> Olaf
> 
> Olaf Bergmann <bergmann@tzi.org> writes:
> 
>> Thank you very much for your review and the very useful suggestions
>> therein. Please find our comments inline. All issues that have not been
>> resolved in the prior discussion threads with Ben and Jim have been
>> addressed in the editor's copy of the draft.
>>
>> Paul Kyzivat <pkyzivat@alum.mit.edu> writes:
>>
>>> I am the assigned Gen-ART reviewer for this draft. The General Area
>>> 1) MAJOR: Management of token storage in RS
>>>
>>> There seems to be an expectation that when the client uploads an
>>> access token that the RS will retain it until the client attempts to
>>> establish a DTLS association. This seems to require some sort of
>>> management of token lifetime in the RS. The only discussion I can find
>>> of this issue is the following in section 7:
>>>
>>>     ... A similar issue exists with the
>>>     unprotected authorization information endpoint where the resource
>>>     server needs to keep valid access tokens until their expiry.
>>>     Adversaries can fill up the constrained resource server's internal
>>>     storage for a very long time with interjected or otherwise retrieved
>>>     valid access tokens.
>>>
>>> This seems to imply a normative requirement to keep tokens until their
>>> expiry. But I find no supporting normative requirements about
>>> this. And, this section only presents it as a DoS attack, rather than
>>> a potential problem with valid usage.
>>
>> There is no normative requirement to keep tokens until their expiry. A
>> resource server could dispose of a stored token at any time, forcing a
>> client to retrieve another access token for subsequent requests directed
>> to the respective resource server. The only requirement imposed on the
>> resource server is that it must not send data to the client if there is
>> no valid access token that authorizes this action (this is described in
>> Section 3.4).
>>
>> Usually, a resource server implementation would keep the received access
>> tokens as long as it deems useful for the intended interaction with the
>> client, with the expiration time being an upper bound for the storage
>> time (see Section 3.4).

I think I understand. Discarding tokens while they are still in use 
would result in sub-optimal behavior (including potential thrashing). 
But this can be viewed as an optimization or quality of implementation 
issue.

>>> ISTM that there is an implied requirement that the RS have the
>>> capacity to store one access token for every PoP key of every
>>> authorized client. If so, that ought to be stated. If not, then some
>>> other way of bounding storage ought to be discussed.
>>
>> The ACE framework already states in Section 5.8.1 that the "RS
>> MUST be prepared to store at least one access token for future use"
>> and "RECOMMENDS that an RS stores only one token per
>> proof-of-possession key". This is now re-iterated in this profile
>> as suggested:
>>
>> NEW:
>>
>>    A resource server MUST have the capacity to store one access token
>>    for every proof-of-possession key of every authorized client.

Sounds good.

>> Although a reasonable implementation
>> of this profile would try to provide storage for every PoP key of
>> every authorized client, this could easily get out of bounds with the
>> separate upload mechanism to the authz-info resource as pointed out in
>> the cited paragraph from the security considerations. This now has
>> been elaborated as follows:
>>
>> OLD:
>>
>>    A similar issue exists with the unprotected authorization
>>    information endpoint where the resource server needs to keep valid
>>    access tokens until their expiry. Adversaries can fill up the
>>    constrained resource server's internal storage for a very long time
>>    with interjected or otherwise retrieved valid access tokens.
>>
>> NEW:
>>
>>    A similar issue exists with the unprotected authorization
>>    information endpoint when the resource server needs to keep valid
>>    access tokens for a long time. Adversaries could fill up the
>>    constrained resource server's internal storage for a very long time
>>    with interjected or otherwise retrieved valid access tokens.  To
>>    mitigate against this, the resource server should set a time
>>    boundary until an access token that has not been used until then
>>    will be deleted.

Sounds good.

>>> 2) MAJOR: Missing normative language
>>>
>>> I found several places where the text seems to suggest required
>>> behavior but fails to do so using normative language:
>>>
>>> * In section 3.3:
>>>
>>>     ... Instead of
>>>     providing the keying material in the access token, the authorization
>>>     server includes the key identifier in the "kid" parameter, see
>>>     Figure 7.  This key identifier enables the resource server to
>>>     calculate the symmetric key used for the communication with the
>>>     client using the key derivation key and a KDF to be defined by the
>>>     application, for example HKDF-SHA-256.  The key identifier picked by
>>>     the authorization server needs to be unique for each access token
>>>     where a unique symmetric key is required.
>>>     ...
>>>     Use of a unique (per resource server) "kid" and the use of a key
>>>     derivation IKM that is unique per authorization server/resource
>>>     server pair as specified above will ensure that the derived key is
>>>     not shared across multiple clients.
>>>
>>> The uniqueness seems to be a requirement. Perhaps "needs to be unique"
>>> should be "MUST be unique". (And something similar for the IKM.)
>>
>> We have changed "needs to be unique" to "MUST be unique" in the first
>> paragraph as suggested, and "the use of a key derivation IKM that is
>> unique" to "the use of a key derivation IKM that MUST be unique" in the
>> second paragraph you have mentioned.

Sounds good.

>>> * Also in section 3.3:
>>>
>>>     All CBOR data types are encoded in CBOR using preferred serialization
>>>     and deterministic encoding as specified in Section 4 of
>>>     [I-D.ietf-cbor-7049bis].  This implies in particular that the "type"
>>>     and "L" components use the minimum length encoding.  The content of
>>>     the "access_token" field is treated as opaque data for the purpose of
>>>     key derivation.
>>>
>>> IIUC the type of serialization and encoding is a requirement. Will
>>> need some rewording to make it so.
>>
>> I take it that you and Ben have agreed that the example description does
>> not necessarily need normative language as the description of this key
>> derivation procedure is meant as an example how the authorization server
>> and the resource server can securely agree on a shared secret to be used
>> between the client and the resource server.

This still confuses me. IIUC preferred serialization and deterministic 
encoding are *optional* in CBOR. The text hear seems to require it, but 
doesn't use normative language to do so.

If these are required for things to work then you make a normative 
statement about it. E.g., "The "type" and "L" components MUST use the 
minimum length encoding."

Or do you intend that some other (non-minimum-length) MAY be used? (In 
which case both sides would need a side agreement on what encoding is used.)

>>> * In section 3.3.1:
>>>
>>>     ... To
>>>     be consistent with the recommendations in [RFC7252] a client is
>>>     expected to offer at least the ciphersuite TLS_PSK_WITH_AES_128_CCM_8
>>>     [RFC6655] to the resource server.
>>>
>>> I think "is expected" should be "MUST".
>>
>> >From [1] I take it that you have been ok with the current wording to
>> indicate that this means a MUST implement while there may be cases where
>> a client knows that it can offer something else.
>>
>>     [1] https://mailarchive.ietf.org/arch/msg/ace/V8WXg8dhE3UkDxbIbOK-D0VmD9U/

Yes.

>>> * Also in section 3.3.1:
>>>
>>>     ... This
>>>     specification assumes that the access token is a PoP token as
>>>     described in [I-D.ietf-ace-oauth-authz] unless specifically stated
>>>     otherwise.
>>>
>>> I think "assumes ... unless" should be "MUST ... unless".
>>
>> We are happy to mandate PoP tokens. In the beginning when
>> the protocol was intended to be similar to OAuth, people wanted to be
>> have some loophole for other token types. The text now has been
>> changed as proposed in [2] to
>>
>>    [2] https://mailarchive.ietf.org/arch/msg/ace/ddtl8a4fmvEdXhEWc3HQtv6RQgo/
>>
>> OLD:
>>
>>    This specification assumes that the access token is a PoP token as
>>    described in [I-D.ietf-ace-oauth-authz] unless specifically stated
>>    otherwise.
>>
>> NEW:
>>
>>    This specification implements access tokens as proof-of-possession
>>    tokens.

Sounds good.

>>> * Also in section 3.3.1:
>>>
>>>     ... New access tokens issued by the
>>>     authorization server are supposed to replace previously issued access
>>>     tokens for the respective client.
>>>
>>> Is this normative? Should "are supposed to" be "MUST"?
>>
>> The ACE profiles would continue to work if there were multiple
>> access tokens for a single resource server/client association in
>> effect at a particular point in time. But neither OAuth nor ACE have
>> defined algorithms for merging authorization rules, and therefore, the
>> ACE WG has decided to keep things simple and assume that a newer
>> access token always replaces the old one.
>>
>> As a consequence, the framework document and the profiles are written
>> as if a newer access token always replaces older access tokens for a
>> respective association between resource server and client.  To make
>> this assumption more clear, we have removed the "are supposed to". The
>> text now reads
>>
>> OLD:
>>
>>    New access tokens issued by the authorization server are supposed to
>>    replace previously issued access tokens for the respective client.
>>
>> NEW:
>>
>>    New access tokens issued by the authorization server replace
>>    previously issued access tokens for the respective client.

The above is still non-normative. Perhaps:

       New access tokens issued by the authorization server MUST replace
       previously issued access tokens for the respective client.

>>> 3) MINOR: Insufficient specification
>>>
>>> (I'm waffling whether this is minor or major.)
>>>
>>> There are a couple of places where what seem to be requirements are
>>> stated too vaguely to be implemented consistently:
>>>
>>> * In the previously mentioned paragraph in 3.3.1:
>>>
>>>     ... This
>>>     specification assumes that the access token is a PoP token as
>>>     described in [I-D.ietf-ace-oauth-authz] unless specifically stated
>>>     otherwise.
>>>
>>> The "unless specifically stated otherwise" is too vague to be
>>> normative. How would the alternative be indicated? Is this an escape
>>> hatch for future extensions? If so, it needs more work to make that
>>> clear and to open a path for that future work.
>>
>> See above. Basically, we now require PoP tokens. (An alternative type of
>> access token would have been indicated with the token_type claim as
>> defined in the framework document.)

Sounds good.

>>> * Also in section 3.3.1:
>>>
>>>     ... The resource server therefore must
>>>     have a common understanding with the authorization server how access
>>>     tokens are ordered.
>>>
>>> The last statement ("must have a common understanding") is
>>> mysterious. IIUC section 4 is covering the same topic in a less
>>> mysterious way.
>>
>> The reason for this seemingly mysterious statement is that it is
>> very difficult to define a strict order on access tokens that works
>> for all intended use cases the protocol has initially been designed
>> for. This was discussed in [3].
>>
>>    [3] https://mailarchive.ietf.org/arch/msg/ace/x9JFbn0a6CRdsIwmQdKReGu5q1E/
>>
>> The only resolution the working group had agreed on by then was to treat
>> use the last token that was received as the newest. There is some text
>> in the framework that tells how the resource server might be able to
>> order access tokens. The most general would be to use the cti claim,
>> therefore the following text has been added to clarify this:
>>
>> NEW:
>>
>>    The authorization server may, e.g., specify a "cti" claim for the
>>    access token (see Section 5.8.3 of [I-D.ietf-ace-oauth-authz] to
>>    employ a strict order.

Its all getting hazy here for me. I trust you.

>>> 4) NIT: Subsection organization
>>>
>>> Both 3.2 and 3.3 share a common structure:
>>>
>>> * The section begins with discussion of the interaction between the
>>> client and the AS.
>>>
>>> * it is followed by a subsection discussing the interaction between
>>> the client and the RS.
>>>
>>> It is odd to have a section with a single subsection. And the
>>> structure isn't easily discerned from the TOC.
>>>
>>> I suggest it would be clearer if each of these sections had *two*
>>> subsections, one covering the AS interactions and the other the RS
>>> interactions. IOW, put the material covering the AS interactions into
>>> a new subsection.
>>
>> Good point, this is indeed very odd. The structure now has been changed
>> to include a subsection "Access Token Retrieval from the Authorization
>> Server" for each of the two modes where the interaction between client
>> and authorization server is described.

I think it seems better now.

	Thanks,
	Paul