[OAUTH-WG] Shepherd Review of draft-ietf-oauth-dyn-reg-management-05

Hannes Tschofenig <hannes.tschofenig@gmx.net> Mon, 24 November 2014 20:09 UTC

Return-Path: <hannes.tschofenig@gmx.net>
X-Original-To: oauth@ietfa.amsl.com
Delivered-To: oauth@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 362B31A8F36 for <oauth@ietfa.amsl.com>; Mon, 24 Nov 2014 12:09:46 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.011
X-Spam-Level:
X-Spam-Status: No, score=-0.011 tagged_above=-999 required=5 tests=[BAYES_20=-0.001, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] autolearn=ham
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 vWv5beJHZ0zT for <oauth@ietfa.amsl.com>; Mon, 24 Nov 2014 12:09:38 -0800 (PST)
Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 2E6461A8F4D for <oauth@ietf.org>; Mon, 24 Nov 2014 12:09:14 -0800 (PST)
Received: from [192.168.131.130] ([80.92.115.84]) by mail.gmx.com (mrgmx003) with ESMTPSA (Nemesis) id 0M0gcI-1YDIFa0YLm-00uuvv for <oauth@ietf.org>; Mon, 24 Nov 2014 21:09:12 +0100
Message-ID: <54739067.3020602@gmx.net>
Date: Mon, 24 Nov 2014 21:09:11 +0100
From: Hannes Tschofenig <hannes.tschofenig@gmx.net>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0
MIME-Version: 1.0
To: "oauth@ietf.org" <oauth@ietf.org>
OpenPGP: id=4D776BC9
Content-Type: multipart/signed; micalg="pgp-sha512"; protocol="application/pgp-signature"; boundary="LI48xgCBKsGFfvvvgC2f2A89gfAx6vHw6"
X-Provags-ID: V03:K0:qG/ZvJ+grjL9j0tlhH1rm0U9m5uAFf15HkNPCw+sovPeoSJjVsA j5Uicynv+p/jr3klBBu08JYyzomqLDDvIatsS0VX/KwYQqv341X3VVy8W3sCMtAWWH/jqEu MIwhO8bSs4hwrHHcfKO3J5tSV0Sz+gaQbR6246ra3RwRyPTYqc20AZsB/272mZ/rWiM4dRB zFlTx79RcGsopqRVb2HJQ==
X-UI-Out-Filterresults: notjunk:1;
Archived-At: http://mailarchive.ietf.org/arch/msg/oauth/gHrMyrH2k1svwP020pG_3cys7Nc
Subject: [OAUTH-WG] Shepherd Review of draft-ietf-oauth-dyn-reg-management-05
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: OAUTH WG <oauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/oauth>, <mailto:oauth-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/oauth/>
List-Post: <mailto:oauth@ietf.org>
List-Help: <mailto:oauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/oauth>, <mailto:oauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 24 Nov 2014 20:09:47 -0000

Hi Justin, Mike, John, Maciej,

as part of my shepherd write-up I carefully read through
draft-ietf-oauth-dyn-reg-management-05. Overall the document is in good
shape but I have a few minor clarification questions that should be
resolved before the document goes to the IESG.

In Section 1.4. "Registration Tokens and Client Credentials" you explain
the different credential types and I was wondering why you aren't
issuing client_secrets to all clients instead of introducing another
credential, the registration access token. While you try to explain the
reasons those appear somewhat constructed. For example, you say that
"not all types of clients have client credentials" but you are the
author of the specification and you can essentially decide what to do.
The registration access token is essentially the same as the client
credential since it is "is uniquely bound to the client identifier".

I believe we have discussed this issue in the past but I don't remember
what the reasoning was. Can you describe what your design rational was
(and add it to the document)?

In Section 1.4.1. "Credential Rotation" you write:

"
   The Authorization Server MAY rotate the client's registration access
   token and/or client credentials (such as a "client_secret")
   throughout the lifetime of the client.
"

You might want to add reasons why the authorization server may want to
take this step.

There are also a bit too many SHOULDs in the document. Every time you
write SHOULD you have to keep in mind to tell the reader what happens in
the other case.
For example, in Section Section 1.4.1 you write:

"
   The registration access token SHOULD be rotated only in response to
   an update request to the client configuration endpoint, at which
   point the new registration access token is returned to the client and
   the old registration access token SHOULD be discarded by both
   parties.
"

Here the question arises whether you are using the SHOULD to indicate
that the authorization server does not always need to rotate the
registration access token and if he does then is must only happen in
response to an update request or does it indicate that the authorization
server could also rotate it in response to other calls?

Also, in the second line one would wonder why the old registration
access token isn't mandatorily discarded. If there are good reasons,
then tell the reader.
Furthermore, the text in Section 2.2 seems to contract this statement:
"
   If the authorization server includes a new client secret and/or
   registration access token in its response, the client MUST
   immediately discard its previous client secret and/or registration
   access token.
"


In Section 2.2 you write:
"
   However, since read
   operations are intended to be idempotent, the read request itself
   SHOULD NOT cause changes to the client's registered metadata values.
"

I am wondering whether this SHOULD NOT statement adds a lot of value
since you allow the request to change metadata values.
You also write the security consideration section:
"
   the registration access token MAY be
   rotated when the developer or client does a read or update operation
   on the client's client configuration endpoint.
"

This means that the content of the registration access token may also
change with a read operation.


Terminology:

Sometimes you write "Client Information Response" and sometimes "client
information response"
The same with "Authorization Server" and "authorization server"

Typo:

"
   Some values in the response,
   including the "client_secret" and r"egistration_access_token", MAY be
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   different from those in the initial registration response.
"

In Section 2.4 "Client Delete Request" you write:

"
   The authorization server SHOULD immediately invalidate all existing
   authorization grants and currently-active tokens associated with this
   client.
"

Under what circumstances wouldn't the authorization invalidate all
grants and active tokens?
You might also want to say what tokens you are talking about since there
are at least the following tokens around:
- access tokens
- refresh tokens
- registration access tokens
- initial access token

"
   If the server does not support the delete method, the server MUST
   respond with an HTTP 405 Not Supported.
"

Why aren't you demanding that the server must support this method?
This would essentially mean that there would be some cases where
deregistration isn't possible.
Of course, there may be the question how important deregistration
actually is if the registration
automatically expires.

You write:
"
   If the client does not exist on this server, the server MUST respond
   with HTTP 401 Unauthorized and the registration access token used to
   make this request SHOULD be immediately revoked.
"

If the client does not exist and someone sends a request with a random
registration access token I am not sure what exactly you want to revoke
here.

In Section 3.1. "Client Information Response" you state the new elements
that are returned to the client. While the client_secret has an
expires_at field the registration_access_token doesn't. Does the expiry
value of the client_secret_expires_at automatically indicate the
lifetime of the  registration access token? I think so. But what happens
if the client_secret is not issued? To make it more complicated you
write the following text in the security consideration section:

"
   While the client secret can expire, the registration access token
   SHOULD NOT expire while a client is still actively registered.
"

The IANA consideration section is empty. Wouldn't it be necessary to
register 'registration_access_token' and 'registration_client_uri' into
the OAuth Dynamic Registration Client Metadata Registry?

Ciao
Hannes