[secdir] Re: Secdir early review of draft-ietf-gnap-resource-servers-07

Justin Richer <jricher@mit.edu> Fri, 02 August 2024 20:28 UTC

Return-Path: <jricher@mit.edu>
X-Original-To: secdir@ietfa.amsl.com
Delivered-To: secdir@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 3CB5AC14F71F; Fri, 2 Aug 2024 13:28:30 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.107
X-Spam-Level:
X-Spam-Status: No, score=-2.107 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, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_BLOCKED=0.001, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=mit.edu
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id lWC8NTVt2Kd4; Fri, 2 Aug 2024 13:28:28 -0700 (PDT)
Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11022098.outbound.protection.outlook.com [40.93.195.98]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 5802CC14F704; Fri, 2 Aug 2024 13:28:28 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OwngPA7zKr1n8R0rNy4vQe2q5mXIP9npNVty9Wt6AhrgDvZP4M/IjKlwHBO47eUQPhO9rqV8/xxLrBnutKVguD/qMY6BXAheW+CB2Q26dWOc0hLeXdxE09LPk2kdNenX2mkTyJyrLhZnTJUL1yrRvZb/RB96KIQpwx7TmnyURy3MHyzpdmP9XlFYsCJhGWeWyCLCyebAylUm5ByBra3Yf9q1azcA0Go6efsbpfLrPvSZ2y+XPLjIR1btQsq29orCElhxIQ9Y2kM4S91ouCyEbEeg/Z1c8QPz2AcjhryguRpPFdgj5Y4/UM0NvH+GrBDvjC/nktAgi+G8VItiHfd2cA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wwMsL/myWl/yjRN/SPhqlH8HdQoFOkiRCqWG3oqadHM=; b=GwE++FRVtDI/S3ghTGVkS8eACw2nLOStL4Jxf05am15ungvODpuhlEb0xKPGmGZuxBJBSGf6op9cEZO3POUz4djWA0/V+BWKueoryp2DpAqhTic9N/gsXFyINzB3wp7Xr9eIPpJGSV5DlHfJWd1sl2K1X17tjN9demcxrMpxxpLbYw+bGugr7qaG9IxPnz3Q02ct+MGP15ibC0f/vk3RuucDcR6atHfICJ8gVIfDTdO+mhtvv+14meZ1lkoay82U3Ki4p9H3UOFOeIhLgz0uorkx4tqkUtebqMQsTToR5UqOHDpdyx+Bd/xK4hR6GVwbN8IE5Mwba849VsrENs8sdg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mit.edu; dmarc=pass action=none header.from=mit.edu; dkim=pass header.d=mit.edu; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mit.edu; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wwMsL/myWl/yjRN/SPhqlH8HdQoFOkiRCqWG3oqadHM=; b=pg0ffieI3Z7+MCTeOVbyho9EktJ8sgXEaPSOnfrxhv1LO4nbv1t4GwmRACyLfPiKEKPg5YZHDh5h+Kfa/XZTdOxNfYv9Z1Ovb1wQJdLPQ8s3X8IHzTbQxvcUCNYGbIh8mSDcCO1D5YUVGwgjIjw8rQPBU7Uw3vPwydFPKXOej9s=
Received: from LV8PR01MB8677.prod.exchangelabs.com (2603:10b6:408:1e8::20) by DS7PR01MB7760.prod.exchangelabs.com (2603:10b6:8:7f::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.23; Fri, 2 Aug 2024 20:28:25 +0000
Received: from LV8PR01MB8677.prod.exchangelabs.com ([fe80::e7d6:999:270f:a820]) by LV8PR01MB8677.prod.exchangelabs.com ([fe80::e7d6:999:270f:a820%6]) with mapi id 15.20.7828.023; Fri, 2 Aug 2024 20:28:24 +0000
From: Justin Richer <jricher@mit.edu>
To: Alexey Melnikov <aamelnikov@fastmail.fm>
Thread-Topic: Secdir early review of draft-ietf-gnap-resource-servers-07
Thread-Index: AQHa5RqGntNYeK31mEqs3O2x2ZxGQg==
Date: Fri, 02 Aug 2024 20:28:24 +0000
Message-ID: <4DD814AB-D978-40A6-BD56-E9AC18D76576@mit.edu>
References: <172243964781.2135640.14090532582807806701@dt-datatracker-659f84ff76-9wqgv>
In-Reply-To: <172243964781.2135640.14090532582807806701@dt-datatracker-659f84ff76-9wqgv>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mit.edu;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: LV8PR01MB8677:EE_|DS7PR01MB7760:EE_
x-ms-office365-filtering-correlation-id: a0b5983b-1d65-4b41-2d5c-08dcb331a8ab
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|376014|38070700018;
x-microsoft-antispam-message-info: /kjgCOc370ozJDA6tjgvTVL7w6Fh3d67VhxUb9aMG2rA/1SOSj1KwLY+cNFne+WenDWaBGRqO9RMYTov8nmXDuEBP0EM6VYEAQ91nfrv4/zISifggT4PEDVg9JSF5Om3Wisi0xTBhPKltD7Az0v7o9gwK32ybrRg9jeQfM3SdA6ZwVDWQTs5kh/hsmdABGowJf42J9Om+O5+0EYEgsYknn5R81dOUST53lng0JBABgHR6xXNwhAY89GpquX6bbXDi/YARWmyvu+NKYH8qvl3JmB1qpmMEDnXcJhN/rIVf9SIu7LZbo6joyzCvI0VI+FJXok6GHJc8ITtwld8pKsOJdk1SAeL20GuSZlk5XU212xxG8j6ys/fvjUNlUKzbJZoLJXdFQb+zOyBJUZstKhcupAu7645NA38vokbSbq4aLUxRx3Zz1wuXG3GPSlNAVG8JdjRWUFIcuJRSKiVS71jroiLo2PURDoCsnx8Say/Ta9rpL6OSXULuVyHuyDGTEqaDklpZUkpXahw0hh66D+YSw/gMob8Kgc4YiLpe0KdrcZop+pn4q//ZCFcI6K6e7M7Y6CSp4gXtbzqkugOH9UIKcO+MADbzGkL7AZcc7SNtMsrj5sVDj4x2fwL4RK3IcaqH13QVg33qi/7zRsMJxhiajz/lr5AWyxzWEa8WsiJMDIlBJOJnzgI4GUPvThtJw/XMfUIWRj9nQtyccsjyvL2gaKFd467BygZLfdbK5JnBiI7Aqz9cvuX89DV04m9qwOrGBMWT0vksuP+8kJ67xcWuoimHwP9iHKnAm9H/8Fe2P+UcTuaJHVnF4HV/BHpRXHijZrsxYSMykIyQtCvdGd7S91/lQLgAHwZPQNLGxVgVdeNwGUvAJULiqYn4+lXBPWVwNJioGt/wPuEfiwKfUfPTsLBonMGfSj0VxTxH7qtfGqBmrZlf6al4b4kPLW7u0uihF2/3vvPmydQgIGKAw7Y/SqQc8wjozRFe7Mo7N6Wi25wJfYERckSnQEmt3Adpt512gKSxtFWoNg7SYKsX0/Eh+V8rI5p6iuEzK/yXXQkDOOWxAzMxaEf62dmrGLNgCbDeNH089c4Jpg7eUhY/K3O5PqMSN2RIwCjPgN9lnUD18UZyCrgu8yhmA4v4HCFrjyKdDmI0JXVdA+KUxPKreBqKaqoXqt5cNaJgRvqwMtEo+AAGmOE+7UHqyvfvxfwZfW97OY5obPYk9iFR70u0L9XmY9B7wYLewaPbQHLoT0GKl3XNvdc/inIV89CY5qJURvyIDPQHaWpdiNxuYqeCsqaVcAbh1yXb/YB41tlsmpoHsqgo+w7RDb68SVopFP07vFx7iss1BJWGns++5BcC2HEnEQwYIa/JeV5EZypoartXzE=
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV8PR01MB8677.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(38070700018);DIR:OUT;SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: YRPQF9ct7aV6CKEPQ+TMtbOBbtOzesnOatISAhsOQ4CcERjrWiYF0L62zLAB1x1aaUlpWCxoQEc/M+dzePfCnBfB6E97p+gV4xHrqN27Mf3HdGNxugUHmACvAVfh5qpHucbZefVKOtI7fc8PRNDc4UNSY1/ARkXvuXoSpE282a7q7uMvDwBEYGyiEFu53cjOSZtLAF2gy/LMDjIWfrRvoMTBdpRfygvPKnFFx3PmELGF5FhRJULqjIIQlMTsjIS8Ka/Lryc1X58HWCi6Vseu1oq8YLj7tz6e3oNjJhE9pn3O+ELavqyjUskKHRHP2ePrFf9P+ApykUA4D5MWhWBKSHjEfBZ1pdu4xY7OjoNM5qrmqr5AtvOv3eBCdSybNyIPnwmsWfVOQKOP1pqZOPPCH5XGLGeYGrR40N/0B4b4dSpUkXo1C2IduHueHeGW4LFSJpzq5rwMARPr+GHxrUfm+iLQEIsNOJdifVD5hrfvh2p3c7MNeTF2+EaZDHpwHGHLIx6yfahiQi7KDN3y8zwtS5tyEE306kvehg32p0JmjYlk1LhqZjtpq8C0+EYYGMK6xpoUeACfkSmlf+BqXAS+ZsdECXOJutX4oYhrL7rVXSsPldfdS0Gjv5/AVr2wY30j56xwI7rCMGptmfnj5urEXB4l1wQlJHuSyOPCBTZhg0HDpvcW2q+KcgI2Rj6S3NWpcSsKQe8Ud2xTY3s4TmEYdU2GU83V6wbAYRFX23dR3McCqnBn2ChxSk85mimyezWqugelL/h1sTWlsMRh3vkJxr9MwCzJwHrnuc2bNC3C0a15dzb1bXVivu59WI3jxTaOeovLmZ+q8u9DveDRDDjee4kAGSjUxDWLP/Z1/Zi61EPgae0gtmf1Dvcu6fLZRBFMUQHWuIukbBw6HrvUSW05Zrcz62hbiv6dNufJAvg1O8JBaPylRUvjSwbKoKnSAKSTzR3D9pAu5wd1ykC0ss9vxjNej0EfZLq0/9C/SyO/ylgcJjQR9dAe8VOUo6PqwZbgt1EabjQ4aVX3GTm5wDrmJB9ich0xH+VRLQl91l0b3UBevnC5sTYK+oxH6q5G2iWUDQnaHrMm1jVty4I0UKU7/Bk71YB8kboOKeGNsOAeT7yulO8Vsv+DEkA8IGrqebcbdZNSJlShGzgG8jUK/a9aD105puFidbmww7nfudhOctpnAN8kxXvUZVWoOraJohBPTvt9m4JnoNp3KR+gSnhaAH1DOvUs5/CYW7o7kdbsyTHBKxiKQSLiuBJb67Hj+GRtgYzNogaaiv7KQie2TR7WnNQ0kTe+2GWT0Ai8njheYnu6fVKk6ZHx+i3ANJbw763oKMnRqrPWVj7xs0vEHiGU9s1jkOfOI0ZoOENftkpLNUGbt3c+V5KaQD+9sKxIs5he8yEMPW5fKb2ww2E24/Zc3zJM6HUxiQq8gtdl0NjTSsCOWwFCyo1yHLab5kMdQ2hEhxHI4DmWqwpJp/jV+/tUn4dAjtc1Lx3EerY9V8pPF4M6YFk2DqZAZg0ZVWCFq46HaJzBK6vC48NgGM+lTyPZMtsAt0YNwntQZdY0xgEMX0VgITQk1GNecL9meU2GDxW9
Content-Type: multipart/alternative; boundary="_000_4DD814ABD97840A6BD56E9AC18D76576mitedu_"
MIME-Version: 1.0
X-OriginatorOrg: mit.edu
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: LV8PR01MB8677.prod.exchangelabs.com
X-MS-Exchange-CrossTenant-Network-Message-Id: a0b5983b-1d65-4b41-2d5c-08dcb331a8ab
X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Aug 2024 20:28:24.3960 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 64afd9ba-0ecf-4acf-bc36-935f6235ba8b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: Q62H5xs+z4l4TujQPwRt5rolAwcP1ooFb/t0vE0M23DvxYqbc30DTe4uTjgiu84N
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR01MB7760
Message-ID-Hash: XI6MWXMYTWVKAUCGDUVJ6GQOSFIR6OBA
X-Message-ID-Hash: XI6MWXMYTWVKAUCGDUVJ6GQOSFIR6OBA
X-MailFrom: jricher@mit.edu
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-secdir.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: "secdir@ietf.org" <secdir@ietf.org>, "draft-ietf-gnap-resource-servers.all@ietf.org" <draft-ietf-gnap-resource-servers.all@ietf.org>, "txauth@ietf.org" <txauth@ietf.org>
X-Mailman-Version: 3.3.9rc4
Precedence: list
Subject: [secdir] Re: Secdir early review of draft-ietf-gnap-resource-servers-07
List-Id: Security Area Directorate <secdir.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/secdir/hwXpYQGtdTd5Td8VjwNmqF_eNHk>
List-Archive: <https://mailarchive.ietf.org/arch/browse/secdir>
List-Help: <mailto:secdir-request@ietf.org?subject=help>
List-Owner: <mailto:secdir-owner@ietf.org>
List-Post: <mailto:secdir@ietf.org>
List-Subscribe: <mailto:secdir-join@ietf.org>
List-Unsubscribe: <mailto:secdir-leave@ietf.org>

Hi Alexey, thanks for the thorough read through.

We’ve gone through and fixed up the IANA sections, good catch — most of that was copy and paste error, and a few places that just needed to be properly cross-referenced. Those changes are here: https://github.com/ietf-wg-gnap/gnap-resource-servers/pull/93

Note that for several of the questions below, the information about format DOES exist in the section that defines the registered value, but is not included in the registry itself.

I also want to address the last couple points directly:


3) In 6.2:

  *  Is presented using the appropriate key for the token (see also
     Section 6.4) Subject identification (the RS knows who authorized
     the token) Issuer restriction (the RS knows who created the token,
     including signing a structure or providing introspection to prove
     this)

Are some comma(s) missing in the sentence above? In particular,
if I remove (), this reads as
 "Is presented using the appropriate key for the token Subject identification Issuer restriction"



This was a formatting error in the source, that’s actually several separate points. We’ve reformatted and reworded it to be parallel, thanks! (Changes in the PR above).

4) 6.5.  Token Exfiltration

  Since the RS sees the token value, it is possible for a compromised
  RS to leak that value to an attacker.  As such, the RS needs to
  protect token values as sensitive information and protect them from
  exfiltration.

Any recommendation on how this can be done?

No, as this is extremely dependent on the RS implementation, which is very much out of scope. But to start, don’t put them in unprotected logs, don’t display them, don’t save them unencrypted to disk, etc…. I don’t think it makes sense to spell out basic "protect sensitive information" techniques here though, it’s more important that we call out the token value as sensitive.


  This is especially problematic with bearer tokens and tokens bound to
  a shared key, since an RS has access to all information necessary to
  create a new, valid request using the token in question.

Is this an obscure way of saying that bearer tokens must not be used?

No, it is a warning about the limitations of bearer tokens, which is a deployment choice by a system. Discussion of the problems and benefits of bearer tokens is discussed in greater depth in GNAP core. Note that this particular discussion also applies to bound tokens that use a shared key, not just a bearer — since the RS in particular has power that might not be obvious to a naive developer. This is an appropriate use of security considerations.



Thank you,

— Justin

On Jul 31, 2024, at 11:27 AM, Alexey Melnikov via Datatracker <noreply@ietf.org> wrote:

Reviewer: Alexey Melnikov
Review result: Has Nits

I have reviewed this document as part of the security directorate's
ongoing effort to review all IETF documents being processed by the
IESG. These comments were written primarily for the benefit of the
security area directors. Document editors and WG chairs should treat
these comments just like any other early review comments.

The document is well-written and seems basically in a good shape.
I have some comments which are not purely editorial, but I don't
think they would be hard to address.

The document has extensive Security and Privacy Considerations,
which seem to cover all things I can think of. Some specific
comments on some of them below.


1) General comment: I don't expect anything to be done about this, but
I think GNAP still has too much optionality and not enough
mandatory to implement features. However creation of relevant registries
is a big improvement.


More specific comments, most of them are minor:

2) In several places in IANA Considerations:

Terminology inconsistencies: claim vs parameter vs token.
I suspect some of them are cut & paste issues, but it is hard to be sure.

Also names or values of some registered fields are not properly constrained.
Lack of such constraints affect interoperability and security.

In particular:

5.3.  GNAP Token Formats Registry

5.3.1.  Registry Template

  Name  The name of the format.

Is there some formal definition of token format names?
Do they allow spaces? Can I use non alpha-numeric characters?
Are non ASCII (e.g. Unicode) characters allowed in them?


5.4.  GNAP Token Introspection Request Registry

5.4.1.  Registry Template

  Name  The name of the claim.

  Type  The JSON data type of the claim value.

  Reference  The specification that defines the token.

Did you mean "claim" in the last sentence?


5.5.  GNAP Token Introspection Response Registry

5.5.1.  Registry Template

  Name  The name of the claim.

  Type  The JSON data type of the claim value.

  Reference  The specification that defines the token.

Did you mean "claim" in the last sentence?



5.6.  GNAP Resource Set Registration Request Parameters Registry

  This document defines a means to register a resource set for a GNAP
  AS, for which IANA is asked to create and maintain a new registry
  titled "GNAP Resource Set Registration Request Parameters".  Initial
  values for this registry are given in Section 5.6.2.  Future
  assignments and modifications to existing assignment are to be made
  through the Expert Review registration policy [RFC8126].

  The Designated Expert (DE) is expected to ensure that:

  *  all registrations follow the template presented in Section 5.6.1.

  *  the parameter's definition is sufficiently orthogonal to other
     claims defined in the registry so as avoid overlapping

s/claims/parameters ?

     functionality.

  *  the parameter's definition specifies the syntax and semantics of
     the claim in sufficient detail to allow for the AS and RS to be

s/claim/parameter ?

     able to communicate the resource set.

5.6.1.  Registry Template

  Name  The name of the parameter.

  Type  The JSON data type of the parameter value.

  Reference  The specification that defines the token.

Did you mean "parameter" in the last sentence?


5.7.  GNAP Resource Set Registration Response Parameters

  This document defines a means to register a resource set for a GNAP
  AS, for which IANA is asked to create and maintain a new registry
  titled "GNAP Resource Set Registration Response Parameters".  Initial
  values for this registry are given in Section 5.7.2.  Future
  assignments and modifications to existing assignment are to be made
  through the Expert Review registration policy [RFC8126].

  The Designated Expert (DE) is expected to ensure that:

  *  all registrations follow the template presented in Section 5.7.1.

  *  the parameter's definition is sufficiently orthogonal to other
     claims defined in the registry so as avoid overlapping

s/claims/parameters ?

     functionality.

  *  the parameter's definition specifies the syntax and semantics of
     the claim in sufficient detail to allow for the AS and RS to be

s/claim/parameter ?

     able to communicate the resource set.

5.7.1.  Registry Template

  Name  The name of the parameter.

  Type  The JSON data type of the parameter value.

  Reference  The specification that defines the token.

Did you mean "parameter" in the last sentence?


5.8.  GNAP RS-Facing Discovery Document Fields

  This document defines a means to for a GNAP AS to be discovered by a
  GNAP RS, for which IANA is asked to create and maintain a new
  registry titled "GNAP RS-Facing Discovery Document Fields".  Initial
  values for this registry are given in Section 5.8.2.  Future
  assignments and modifications to existing assignment are to be made
  through the Expert Review registration policy [RFC8126].

  The Designated Expert (DE) is expected to ensure that:

  *  all registrations follow the template presented in Section 5.8.1.

  *  the claim's definition is sufficiently orthogonal to other claims

s/claim/field ?
s/claims/fields ?

     defined in the registry so as avoid overlapping functionality.

  *  the claim's definition specifies the syntax and semantics of the
     claim in sufficient detail to allow for RS to be able to

s/claim/field (twice)?

     communicate with the AS.

5.8.1.  Registry Template

  Name  The name of the parameter.

  Type  The JSON data type of the parameter value.

I think you mean "field" twice above?

  Reference  The specification that defines the token.

Did you mean "field" or "parameter" in the last sentence?

5.8.2.  Initial Registry Contents

  The table below contains the initial contents of the GNAP RS-Facing
  Discovery Registry.

       +================================+==========+=============+
       | Name                           | Type     | Reference   |
       +================================+==========+=============+
       | introspection_endpoint         | string   | Section 3.1 |
       |                                |          | of RFC xxxx |
       +--------------------------------+----------+-------------+
       | token_formats_supported        | array of | Section 3.1 |
       |                                | strings  | of RFC xxxx |
       +--------------------------------+----------+-------------+
       | resource_registration_endpoint | string   | Section 3.1 |
       |                                |          | of RFC xxxx |
       +--------------------------------+----------+-------------+
       | grant_request_endpoint         | string   | Section 3.1 |
       |                                |          | of RFC xxxx |
       +--------------------------------+----------+-------------+
       | key_proofs_supported           | array of | Section 3.1 |
       |                                | strings  | of RFC xxxx |
       +--------------------------------+----------+-------------+

While you provide basic JSON types above, I think some of the fields register
would benefit from ABNF or some other sort of formal definition of value format.
Are "introspection_endpoint" and "resource_registration_endpoint" URIs?

Are "token_formats_supported" values from the registry in 5.3?

What about syntax of each individual "key_proofs_supported" element?


3) In 6.2:

  *  Is presented using the appropriate key for the token (see also
     Section 6.4) Subject identification (the RS knows who authorized
     the token) Issuer restriction (the RS knows who created the token,
     including signing a structure or providing introspection to prove
     this)

Are some comma(s) missing in the sentence above? In particular,
if I remove (), this reads as
 "Is presented using the appropriate key for the token Subject identification Issuer restriction"


4) 6.5.  Token Exfiltration

  Since the RS sees the token value, it is possible for a compromised
  RS to leak that value to an attacker.  As such, the RS needs to
  protect token values as sensitive information and protect them from
  exfiltration.

Any recommendation on how this can be done?

  This is especially problematic with bearer tokens and tokens bound to
  a shared key, since an RS has access to all information necessary to
  create a new, valid request using the token in question.

Is this an obscure way of saying that bearer tokens must not be used?

Best Regards,
Alexey