Hi Tom,
please find my commnets inline.
Il 17/01/2022 02:07, Tom Harrison ha scritto:
Hi Mario,
On Fri, Jan 14, 2022 at 09:19:55AM +0100, Mario Loffredo wrote:
Il 11/01/2022 12:03, Tom Harrison ha scritto:
On Fri, Dec 17, 2021 at 11:54:57AM +0100, Mario Loffredo wrote:
Il 17/12/2021 06:59, Tom Harrison ha scritto:
I'm not sure that it's possible to remove the ID token parameter
from the document, at least as it's currently written. If no ID
token is provided, then the RDAP server will have only an access
token to work with, and the RDAP server must treat that token as
opaque, since it's a relying party (only the resource server can
interrogate the access token). If all that the RDAP server gets
is an opaque access token, then it won't know which authorization
server to contact in order to verify that access token, so it
won't be able to verify that the user is authorized.
In theory, RFC6749 does not mandate any specific format for the
access token but, in practice, many Auth 2.0 implementations has
elected to use JWT (see
https://www.rfc-editor.org/rfc/rfc9068.html#name-introduction).
Hence, RDAP clients would probably be required to send an
unnecessary ID Token.
But the relying party must treat the access token as opaque,
regardless of whether it uses JWT or similar. From RFC 9068:
6. Privacy Considerations
As JWT access tokens carry information by value, it now
becomes possible for clients and potentially even end users
to directly peek inside the token claims collection of
unencrypted tokens.
The client MUST NOT inspect the content of the access
token: the authorization server and the resource server
might decide to change the token format at any time (for
example, by switching from this profile to opaque tokens);
hence, any logic in the client relying on the ability to
read the access token content would break without recourse.
The OAuth 2.0 framework assumes that access tokens are
treated as opaque by clients.
[ML] I think that in the sentence above the term "client" refers to
the frontend application that is normally used in the classic OIDC
pattern.
That's right. A "client" that uses OIDC is referred to as a "relying
party" in the OIDC context, too. In the draft, the RDAP server is a
"client" per OAuth 2 and a "relying party" per OIDC.
In that pattern, the client does not need to inspect the access
token because it contains only information useful for the resource
server.
I don't understand this point. Even if the (OAuth) client might make
use of the information in the access token, the (OAuth) client is not
permitted to inspect it, and must treat it as if it were opaque.
[ML] What I meant to say is that in the OIDC reference interaction
pattern, the RDAP server would act as a Resource Server. An RDAP client
would act as a Relying Party.
Normally, the RP, that is a frontend for the RS, is a trusted
application and it doesn't need to inspect the access token. On the
contrary, the RS inspects tha access token to make access control decisions
based on some claims designed for being included in the access token
such as groups, roles, entitlements.
In the draft, an RDAP client is normally untrusted so the RDAP server
acts as an RP but we cannot ignore that the RDAP server is still an RS.
I think that both the OAuth and the OIDC actors was defined for the
reference pattern so we cannot apply them to the draft pattern
straightforwardly because otherwise we'll face some inconsistencies.
For example, now the mostly used access token format is JWT. Such a
format is perfectly consistent with the reference pattern because it
isn't normally exchanged outside a trusted context.
So, with reference to the draft, we cannot say that the access token
MUST be opaque but we can say that it MUST be treated as opaque by the
RDAP client and, anyway, it MUST NOT include sensitive information.
In addition, we cannot say that the RDAP server MUST treat the access
token as opaque because it is normally inspected by the RS.
Definitively, we have two patterns: the classic one that is likely to be
currently used in practice and the one proposed by the draft that in my
opinion should be harmonized with the former to make them coexist.
Hope I made myself clear.
On the contrary, I'm much more worried about what is stated in the
subsequent paragraphs of the same section of RFC 9068:
In scenarios in which JWT access tokens are accessible to the end
user, it should be evaluated whether the information can be accessed
without privacy violations (for example, if an end user would simply
access his or her own personal information) or if steps must be taken
to enforce confidentiality.
Possible measures to prevent leakage of information to clients and
end users include: encrypting the access token, encrypting the
sensitive claims, omitting the sensitive claims or not using this
profile, and falling back on opaque access tokens.
Based on the content of rdap-openid draft, an end user could be able
to access the information stored in a JWT token.
Therefore, my proposal is to let the RDAP operators use the access
token format as they see fit. If the access token is a JWT, it
SHOULD/MUST not include sensitive information.
As an additional note, such paragraphs enforce the concept that the
ID token should not be exchanged between the client and the server
in RDAP because for sure the ID token is decryptable and includes
sensitive information.
I think the text quoted above is about including content in ID/access
tokens that should not be exposed to the (OAuth) client or the (OAuth)
end-user at all, rather than about content that should not be exposed
to unrelated third parties. Given that providing the ID token to the
(OAuth) client is an essential part of the OIDC flow, it's unlikely
that the ID token will contain information that shouldn't be exposed
to the (OAuth) end-user. (That's not to say that information like
this should be passed around unnecessarily, given that extra transport
generally introduces additional risks around exposure to unrelated
third parties.)
[ML] Agreed.
Possibly the simpler way to deal with the underlying problem here
is to have the RDAP server be responsible for token
storage/management, rather than passing that off to the client. If
the RDAP server maintains knowledge of the client in some other way
(e.g. via a cookie), then the problems with the transmission of
token information become moot. This does mean that the RDAP server
needs to maintain some state, but that doesn't seem like a serious
problem. It also means the flow is more like conventional OIDC,
which may help from an analysis/review perspective.
[ML] If I understood well, it seems to me you are proposing to
drastically review the draft.
I'm not saying that it is a wrong proposal but it would simply
result in refactoring the document. We should give answer to some
questions, such as: should the /tokens endpoint still be useful?
which information should the token response contain? how could
refreshment be requested ?
Without having thought about this in detail:
- The /tokens endpoint would no longer be useful, and would be
removed.
- Assuming that the RDAP server is able to use cookies to maintain
session state with relevant RDAP clients, then the RDAP server
could handle token refresh transparently. In the event that the
token was expired and could not be refreshed, the RDAP server would
prompt the user to authenticate again.
[ML] Personally, I wouldn't object to your proposal.
I think we should also consider the session management as an
alternative to passing always the access token but without making
large changes.
I don't think having it as an alternative to the current approach is a
good idea. The motivation for adding it is to address the concerns
raised around how tokens are passed around. If there is another way
to address those concerns, I'd prefer that that change be made and
there be a single 'path' for implementors to follow.
[ML] My suggestion was based on the assumption to maintain the basic
principles of the current document.
Anyway, if there was a consensus on reviewing radically the document to
be more compliant with the OIDC reference pattern, I would be pleased.
Best,
Mario
-Tom
_______________________________________________
regext mailing list
regext@ietf.org
https://www.ietf.org/mailman/listinfo/regext
--
Dr. Mario Loffredo
Technological Unit “Digital Innovation”
Institute of Informatics and Telematics (IIT)
National Research Council (CNR)
via G. Moruzzi 1, I-56124 PISA, Italy
Phone: +39.0503153497
Web: http://www.iit.cnr.it/mario.loffredo
_______________________________________________
regext mailing list
regext@ietf.org
https://www.ietf.org/mailman/listinfo/regext