Vittorio, some comments in line:
> An SDK is going to support "sub" wether it is required or optional.
When I think about support for sub in this case, I am not thinking
about just parsing the sub value if it’s present or not surfacing it
in an object model if it’s not- i think about reliably offering the
higher level jobs to be done that are made possible by the sub
presence (such as the correlation with the calling subject and local
information, exactly as in your example all the movies a user watched
thru that particular API).
> the resource is learning that the same user is doing different
transactions
Thanks for the clarification, I didn’t realize that you were not just
considering correlation across resources, but across calls to the same
API. And you are right that in that case, an API would be able to
correlate the user across subsequent API calls.
Per the above, I think that the ability of performing that correlation
inter-API is a goal on most systems. More below.
> But NOT every token. So there were use cases where it was not required.
Not that it proves anything conclusively given that I only sampled 7
system, but sub was actually used by all of them- with one of them
omitting it only in a particular circumstance, for tokens issued via
client credentials grant, and leveraging its absence as a way of
deducing the nature of the token (user or app identity). During
earlier drafts we debated at length the issue of providing mechanics
to perform that distinction and the outcome was that there was no
interest in providing it; and in the same debate it was established
that sub applies to the authenticated entity, hence it can describe
the app principal as well.
Again, the fact that the main analyzed systems don’t make a strong
case for the absence of sub doesn’t imply that no such case exist; but
I believe it is a strong indicator of sub usefulness in real world
scenarios. In fact, together with iss and aud, sub is the only claim
appearing in every provider JWT AT examined (Tho both sub and aud have
each one exception due to special circumstances).
I am fine with explicitly calling out that the presence of a mandatory
sub makes it possible for an API to correlate subsequent calls on the
same entity.
I agree with you that the ability of performing correlation inter-API is
a goal on most systems. However, this correlation *alone *CANNOT be
achieved
using the sub claim using the definition of sub as defined in RFC 7519
(4.1.2):
The subject value MUST either be scoped to be *locally unique
in the context of the issuer or be globally unique*.
Using the sub claim for inter-API correlation purposes would necessarily
allow correlation across different resources.
In the "Privacy considerations" section, whether sub is REQUIRED or
OPTIONAL, the reader should be warned that the presence of the "sub"
(subject) claim
in a JWT makes it possible for different resources to correlate
different calls, as well as for the same resource to correlate between
inter-API calls.
I am ready to bet it won’t be a surprise for people using proprietary
JWT ATs, also thanks to the widespread practice of using slightly
modified ID token validation SDKs
(when ID token themselves aren’t directly used in lieu of ATs for API
calls, as done by the likes of Kubernetes and other mainstream
products, which hopefully will
eventually consider this profile instead).
As a last resort, nothing forces the AS to stop at varying sub values
only per resource; it could go farther and supply a different sub
value at every token issuance
for the same authenticating principal if it so chooses, and still
adhere to the letter of this profile while preventing cross operation
correlation.
Unfortunately, this is not possible since RFC 7519 (4.1.2) states:
The subject value MUST either be scoped to be *locally unique
in the context of the issuer or be globally unique*.
That would adhere to the letter of this interop spec if not the the
spirit, given that layout would be respected and one can creatively
define principals in its own system.
If Apple can assign anti correlation emails, nothing prevents an AS
doing the same with sub at different granularity.
That would break the job to be done that sub is meant to enable, but
would prevent correlation in practice AND it would allow for us to
include a piece of info
that proved to be useful for a large portion of known cases. But to
reiterate, even if this workaround would not be possible,
I would still be OK with admitting cross operation correlation within
the same resource as by design.
.... and I hope you are also OK for admitting cross correlation of
subjects between different resources. The question whether this was also
done "by design" (or not) is left open.
Similar considerations apply for the client_id (client identifier) since
RFC 6749 (2.2) states:
The client identifier [i.e. a unique string representing the
registration information provided by the client] is *unique to the
authorization server*.
Denis
On Mon, Apr 13, 2020 at 18:05 Dick Hardt <dick.ha...@gmail.com
<mailto:dick.ha...@gmail.com>> wrote:
An SDK is going to support "sub" wether it is required or optional.
On Mon, Apr 13, 2020 at 1:40 PM Vittorio Bertocci
<vitto...@auth0.com <mailto:vitto...@auth0.com>> wrote:
“Ide rockers” is iPhone autocorrect jargon for “identifiers”,
of course :P
On Mon, Apr 13, 2020 at 13:13 Vittorio Bertocci
<vitto...@auth0.com <mailto:vitto...@auth0.com>> wrote:
It’s certainly possible to conceive ATs without subs, but
I think the profile would be way less useful for SDK
developers.
On the objections:
The sub doesn’t have to be a user, if you look at the
earlier discussions the case in which the token has been
issued for an application via client creds (hence non
user) has been debated at length.
Knowing the subject does not necessarily lead to API being
able to collide and track users, given that the sub can be
a PPID that is different for every resource even if the
authenticated subject was the same.
The privacy correlation I described is not solved by a per
resource directed identifier as the resource is learning that the
same user is doing different transactions -- or per my example,
the resource is learning all the movies the user is seeing.
The sub is mandatory here because it was present in nearly
every token among the ones observed,
But NOT every token. So there were use cases where it was not
required.
and although one should not overindex on those scenarios,
I took that as strong indication that it is a frequently
used field and guaranteeing its presence facilitates
embedding in SDKs lots of downstream features, such as
correlating with locally stored attributes, which would
otherwise left as exercise to the reader.
NOT correlating all the different actions by the user may be the
desired privacy goal by a deployment.
Per the points above, there are no obvious downsides in
requiring the presence of the sub and significant upsides.
Again, the AS is in full control of the sub content hence
none of the privacy concerns mentioned here are mandated
by the sheer presence of the sub claim. If you feel the
privacy section should be stronger in warning an AS
against the possibility of collusion if global ide rockers
are used, I am happy to reword accordingly
Per Aaron's comment, if this profile is NOT intended to support
use cases where the RS should not be able to correlate a user
between resource accesses, then it is fine for "sub" to be
required. If so, then the document should strongly point that out.
On Mon, Apr 13, 2020 at 10:16 Aaron Parecki
<aa...@parecki..com <mailto:aa...@parecki.com>> wrote:
This is a good point, I often use the hotel key
analogy as well. The room door is the RS, the key is
the access token, the door does not need to know who
the user is in order to know if it’s okay to unlock
given a particular key.
If sub is required, then this profile is limited in
use to cases where user identifiers are part of the
system, and there will be situations in which it’s not
appropriate to use this profile for access tokens. If
that’s okay, this should be clarified in the overview
section to describe when this profile should be used.
Aaron
On Mon, Apr 13, 2020 at 10:08 AM Dick Hardt
<dick.ha...@gmail.com <mailto:dick.ha...@gmail.com>>
wrote:
Why does the "sub" need to be required?
An access token is to prove authorization. The RS
may not need "sub" to constrain fulfilling the
client request.
For example, it the access token has the same
properties as a movie ticket, the RS does not need
to have any identifier for who purchased the movie
ticket.
The privacy implication is the RS can correlate
across API calls to know it is the same subject.
On Mon, Apr 13, 2020 at 8:16 AM Denis
<denis..i...@free.fr <mailto:denis.i...@free.fr>>
wrote:
Hello,
More on privacy about "JWT Profile for Access
Tokens".
The current document REQUIRES the claim names
*sub* and *client_id*.
* sub REQUIRED - as defined in section
4.1.2 of [RFC7519].
* client_id REQUIRED - as defined in
section 4.3 of [RFC8693]
*1) **sub REQUIRED*
RFC 7519 states:
4.1.2. "sub" (Subject) Claim
The "sub" (subject) claim identifies
the principal that is the
subject of the JWT. The claims in a JWT
are normally statements
about the subject. The subject value
MUST either be scoped to**
*be locally unique in the context of the
issuer or be globally unique*.
The processing of this claim is
generally application specific. The
"sub" value is a case-sensitive string
containing a StringOrURI
value. *Use of this claim is OPTIONAL.*
If *sub *is *REQUIRED *for this profile, then
this allows all resource servers to link
accesses made by the same client on different
servers.
*2) client_id REQUIRED*
RFC 8693 states:
4.3. "client_id" (Client Identifier) Claim
The client_id claim carries the client
identifier of the OAuth 2.0 [RFC 6749]
client that requested the token.
RFC 6749 states:
2.2. Client Identifier
The authorization server issues the
registered client a client
identifier -- a unique string
representing the registration
information provided by the client.
The client identifier is not a
secret; it is exposed to the resource
owner and MUST NOT be used
alone for client authentication. *The
client identifier is unique to**
** the authorization server.*
If *client_id* is REQUIRED for this profile,
this also allows all resource servers to link
accesses made by the same client on different
servers.
*Both claim names should be OPTIONAL *to allow
to support the privacy principle of unlinkability.
Would both names remain *REQUIRED*, the
Privacy considerations section should mention
that such a linkage by different resource servers
will always be possible when using this profile.
Denis
I have uploaded the second presentation for
today's session, the JWT Profile for Access
Tokens.
https://datatracker.ietf.org/meeting/interim-2020-oauth-04/session/oauth
Regards,
Rifaat
_______________________________________________
OAuth mailing list
OAuth@ietf.org <mailto:OAuth@ietf.org>
https://www.ietf.org/mailman/listinfo/oauth
_______________________________________________
OAuth mailing list
OAuth@ietf.org <mailto:OAuth@ietf.org>
https://www.ietf.org/mailman/listinfo/oauth
--
----
Aaron Parecki
aaronparecki.com <http://aaronparecki.com>
@aaronpk <http://twitter.com/aaronpk>
_______________________________________________
OAuth mailing list
OAuth@ietf.org <mailto:OAuth@ietf.org>
https://www.ietf.org/mailman/listinfo/oauth
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth