[OAUTH-WG] some WGLC comments on draft-ietf-oauth-jwsreq-06

Brian Campbell <bcampbell@pingidentity.com> Tue, 27 October 2015 22:42 UTC

Return-Path: <bcampbell@pingidentity.com>
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 1A6051A1A70 for <oauth@ietfa.amsl.com>; Tue, 27 Oct 2015 15:42:27 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.478
X-Spam-Level:
X-Spam-Status: No, score=-0.478 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, J_CHICKENPOX_34=0.6, MIME_8BIT_HEADER=0.3, SPF_PASS=-0.001] autolearn=no
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 u3WNtWtkPvPT for <oauth@ietfa.amsl.com>; Tue, 27 Oct 2015 15:42:24 -0700 (PDT)
Received: from mail-io0-x233.google.com (mail-io0-x233.google.com [IPv6:2607:f8b0:4001:c06::233]) (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 5CB6F1A1A68 for <oauth@ietf.org>; Tue, 27 Oct 2015 15:42:24 -0700 (PDT)
Received: by iody8 with SMTP id y8so82402633iod.1 for <oauth@ietf.org>; Tue, 27 Oct 2015 15:42:23 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pingidentity.com; s=gmail; h=mime-version:from:date:message-id:subject:to:content-type; bh=mRBvh50fkLarKmwf+I+f/hZsOaN7efuHCTRZC4TAD5o=; b=BM3dBgrap2Zwj4HMUcGC64D6e98dUgs7VtkewUQ+xTzwZK2mqq8e+WgqBe+6l22p6s KbGv1y6PI94FcfyjZ9d4zTFasTsyzaoelwtNwtTzHRsD6xafDo3yES1XoEc2XIvrh4Dn rujC8Jf97Tehw3WRd8JlGT76F76ydNhz436IM=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to :content-type; bh=mRBvh50fkLarKmwf+I+f/hZsOaN7efuHCTRZC4TAD5o=; b=HU6inR8sq6RMyst+Y5EFJPZZ6ib9GJ1z9tlRP10p6jBVbwOgXzsWmZeg7fd3hZTa6X j2WTHIvq8woMXgixzzfZdya8yhyxyjiiXXSFGlVm777Z632jjksxD8n70bubdIRSze8k fkHGnC8UUciji6Ij5xgAgky1YqfxjKXGtIoX3N/6mq2ic4N0zukZdOuQvSPW+4rfkuiU QeGJz+9BJa9hZBK6PbZUWpy6jkchU+Wee9c7rU0NE3oGGgmpFiats7OpkL+bKU9FHau7 Y+o+LK1PoSLfhCzIxuQn/yK3UV1+xxfkEF0dib38B1nFqveYB/42pnJw92X07KLp+h0t OQOg==
X-Gm-Message-State: ALoCoQko1KKrhZgTSWlOoFG+LkMUa1HniMFlMh2jBu8rZ8VinxjOuVILsLE/VSdhlCQtjFJjUHP5
X-Received: by 10.107.7.86 with SMTP id 83mr48613036ioh.48.1445985743711; Tue, 27 Oct 2015 15:42:23 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.64.117.132 with HTTP; Tue, 27 Oct 2015 15:41:54 -0700 (PDT)
From: Brian Campbell <bcampbell@pingidentity.com>
Date: Tue, 27 Oct 2015 16:41:54 -0600
Message-ID: <CA+k3eCRH1APvnrC6sxru88MvzNmqULe-42r4+1mex-08DXhGjw@mail.gmail.com>
To: 崎村夏彦 <n-sakimura@nri.co.jp>, John Bradley <ve7jtb@ve7jtb.com>, oauth <oauth@ietf.org>
Content-Type: multipart/alternative; boundary="001a113ed3e09aec4705231dcac1"
Archived-At: <http://mailarchive.ietf.org/arch/msg/oauth/7qxNbZSw0XWXVwSH29C4pCT3QkU>
Subject: [OAUTH-WG] some WGLC comments on draft-ietf-oauth-jwsreq-06
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: <https://mailarchive.ietf.org/arch/browse/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: Tue, 27 Oct 2015 22:42:27 -0000

Sakimura-san, Senior Bradley, and distinguished members of the OAUTH WG,

I re-read draft-ietf-oauth-jwsreq (-06 anyway, it'd been a while) for WGLC
and, while I feel it's in pretty good shape, I did have a few comments on
the draft. Those are listed below in roughly the order I came across things
while reading the document.

To my eye, "oauth-jar" looks a bit awkward. I'd suggest changing the abbrev
to something like
"OAuth JAR".

>From the wording in Section 3
<https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-3>, it is
unclear whether the Request Object can be a JWE only or if a JWS is always
used (with alg:none for unsigned) and is nested within a JWE when
encryption but not singing is needed. To my reading there is text that
suggest both cases. Which is it? I think some clarification is needed
around this. Section 5.1
<https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-5.1>
doesn't help me as I'm unsure if "unsigned (plaintext) Request Object" is
an out-of-date usage of the old way to refer to the "none" JWS alg or is
intended to mean the straight up JSON of the request object parameters.

Also in Section 3
<https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-3>, the
sentence 'The Authorization Request Object MAY alternatively be sent by
reference using the "request_uri" parameter.' reads a little awkward
because the other alternative isn't explicit discussed anywhere nearby.
Perhaps something like "The Authorization Request Object may be sent by
value as described in section 4.1 or by reference as described in section
4.2."?

Also in Section 3
<https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-3>, the
sentence "If a required parameter is not present in neither the query
parameter nor the Request Object, it forms a malformed request." made my
brain hurt. Maybe reword to something like, "If a required parameter is
missing from both the query parameters and the Request Object, the request
is considered malformed."?

Also in Section 3
<https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-3>, '...
the Authorization Request Object SHOULD contain the Claims "iss" (issuer)
and "aud" (audience) as members ...', however, that will produce a
parameter name conflict with the "aud" parameter from OAuth 2.0
Proof-of-Possession: Authorization Server to Client Key Distribution.
<https://tools.ietf.org/html/draft-ietf-oauth-pop-key-distribution-02>
Seems like draft-ietf-oauth-pop-key-distribution will need to change its
parameter name (aud in JWT is pretty well established). And shouldn't
draft-ietf-oauth-jwsreq register some of the JWT's Registered Claim Names
<http://tools.ietf.org/html/rfc7519#section-4.1> (at least iss and aud but
maybe exp and others) as authorization request OAuth parameters
<https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml#parameters>
?

Also in Section 3
<https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-3>, I
personally feel like the "extension variables" detract from the example
being able to easily convey the concept. I would suggest using only
'vanilla' OAuth parameters. Or, at the very least, removing the "claims"
stuff, which doubles the space used by the example and is a very OpenID
Connect specific thing. This applies to the examples throughout the draft
including those that have the encoded JWT Request Object.

In Section 4
<https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-4>, the
whole "The client constructs the authorization request URI by ..." followed
by the list of parameters is somewhat awkward to me - especially with the
"REQUIRED"s. Why list "state" here and none of the others here? I think I
know why (you expect state to vary on each request but not others) but a
lot of inferring needs to happen from the reader.  For the extension
defined in this document, one uses either request_uri or request (but not
both, right? I'm not sure it's explicitly stated anywhere) and whatever
other parameters are needed in the given situation. Maybe just some text
towards that end rather than the list format?

Also in Section 4
<https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-4>, the
request_uri in the example is a lot like the URI that's used for
redirect_uri in a lot of places (the /cb path, I think, was intended to
short for callback). I mean, it *could* happen but the example is more
confusing than needs to be. It's also too long/wide for the page - add some
line breaks, which are for display purposes only. Perhaps move this example
to 4.2(.1) somewhere and match the value with the value shown there?

Also in Section 4
<https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-4>, the
sentence that starts with 'When the "request" parameter is used...'
suggests that the text about JWT parameters superseding others is only
applicable to the pass by value method but it applies to both. Perhaps
change '"request" parameter' to 'Request Object'?

The second paragraph of Section 4.2.1
<https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-4.2.1>
talks about "requested values for Claims" which is an OpenID Connect thing
that isn't really applicable to this draft. Can this paragraph be dropped
or made more general to be about any potentially sensitive or PII data?

Also in Section 4.2.1
<https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-4.2.1>, is
"... at a URL the Server can access... " - assume the "Authorization
Sever"?

Isn't it a bit odd in Section 5.2
<https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-5.2> to
talk about the "request_object_signing_alg" which is defined in OpenID
Connect Dynamic Client Registration
<http://openid.net/specs/openid-connect-registration-1_0.html> (which is
not referenced) and kinda mentioned in OpenID Connect Core
<http://openid.net/specs/openid-connect-core-1_0.html> (informative
referenced)? I don't know that it belongs here? Or if it does, what about
request_object_encryption_alg and request_object_encryption_enc? I suppose
related to that is the question of if/how to use the client_secret for HMAC
and symmetric encryption algorithms and if that needs to be discussed here?
Indicating public key(s) too for that matter. Seems like all the
metadata/registration stuff should be in here. Or it should all be out of
scope. But just the request_object_signing_alg seems odd to me.

Section 6 <https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-6>
says that "... this document defines additional error values ..." but those
were previously defined in 3.1.2.6 of OpenID Connect Core
<http://openid.net/specs/openid-connect-core-1_0.html#AuthError>. Maybe
just change the wording to reflect the real state of things?

Section 7 <https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-7>
says that "The request_object_signing_alg OAuth Dynamic Client Registration
Metadata is pending registration by OpenID Connect Dynamic Registration
specification." But is that true? The registry
<https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml#client-metadata>
doesn't have it and Connect's Registration
<http://openid.net/specs/openid-connect-registration-1_0.html#IANA> "makes
no requests of IANA".

As I'm sure reading this has been a ton of fun for the editors, I'm sure
you will be happy to please add me to the Acknowledgements Section
<https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-06#section-9> ;)