[regext] Feedback to draft-ietf-regext-rdap-openid-12

Pawel Kowalik <pawel.kowalik@ionos.com> Mon, 11 April 2022 10:41 UTC

Return-Path: <pawel.kowalik@ionos.com>
X-Original-To: regext@ietfa.amsl.com
Delivered-To: regext@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 2A15D3A15BC for <regext@ietfa.amsl.com>; Mon, 11 Apr 2022 03:41:29 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.098
X-Spam-Level:
X-Spam-Status: No, score=-7.098 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, RCVD_IN_DNSWL_HI=-5, SPF_HELO_NONE=0.001, T_SCC_BODY_TEXT_LINE=-0.01, T_SPF_PERMERROR=0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=ionos.com
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 AAOImzyK-ieZ for <regext@ietfa.amsl.com>; Mon, 11 Apr 2022 03:41:24 -0700 (PDT)
Received: from mail-lf1-x133.google.com (mail-lf1-x133.google.com [IPv6:2a00:1450:4864:20::133]) (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 1ED173A15AE for <regext@ietf.org>; Mon, 11 Apr 2022 03:41:23 -0700 (PDT)
Received: by mail-lf1-x133.google.com with SMTP id h14so20703853lfl.2 for <regext@ietf.org>; Mon, 11 Apr 2022 03:41:23 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ionos.com; s=google; h=mime-version:from:date:message-id:subject:to :content-transfer-encoding; bh=8d65effvROg5Q0tTTak9yP+6Qs7hBcscbtD+4QGOsq4=; b=iGKuVMNW9PjsnLWNC+4DLCwHR5YgTYTRfHY1E9rHDnXwndD6kf5n3cN2Ynb1bbvWKv Fcj3LWNF6IP2/QPQbab0YTwpIcfE/YvJJDFW9tdxOMufQBou9LLHjRcrEVv1cdfc8Ott M8PygnT3eOPDvHM5vq1jq9BSGL06Ei3f294XEmjXyTGr2SR3C9wYEwtS5QQstOsPGjh6 pzqeNRjvvpuDDXrLD2ZBnmdLVlcmrFxxtSo4SiRix2fqDLyn6UaLQ0KEfJJIxZvKwZMq jpvBA43EEm9lOLcdABxzWV61B3nfa7XNUw/OLZEsQp10kMcKEKTJqkij0X1brW4elRO0 XMig==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to :content-transfer-encoding; bh=8d65effvROg5Q0tTTak9yP+6Qs7hBcscbtD+4QGOsq4=; b=thHmgHhI2UR0tZaa759yzwPqu5Cbpzw1ovrveeHBPwA1K+n+Tn1Cmt62Q8yiCgFzXK fWsQaBSd93pwpljLuLDMoWFptkKTZNWVskNjGCkWh6gE8NUJn6kOhZqO6GbjsmkcG5SP jYPo1UnXYz1lJy99I4jS2XGCAhOts/EmkLqcuAzW+p1L/JalGtyFkzUIpRrgzmTuooHh vrwwXpPBugcSIlXPQBdn3ppkSreR7CfHSTsYjKs/UBPbk2Bv/tszBbunmH7e7DlGyakk Hm0MQYD7/MVdzkYEOw6+/Qps7A1DyP0ZEAzKGeh8FZOYr+ncSvk0aN1hA7O6bq+rduLm hFzg==
X-Gm-Message-State: AOAM532qBO8v1kcW7ZfD2WzX0rslvrDsOMdZ4dwMVktOxqmb/FrvmxMM SX/JUG//VkiFx6RrgbO8uTQdzVVsquLE3NlsS6xq6VUTKQLD8A==
X-Google-Smtp-Source: ABdhPJyuhKp93TqsOYRW7DXPVEnDENB0/p+5lCi6JwO3g5psqbJPzX1Hvmzo2BEa38CU41mwd47JfezlAJlYuiWBrXo=
X-Received: by 2002:a05:6512:b1b:b0:44a:9ae9:b9bf with SMTP id w27-20020a0565120b1b00b0044a9ae9b9bfmr20833220lfu.365.1649673681384; Mon, 11 Apr 2022 03:41:21 -0700 (PDT)
MIME-Version: 1.0
From: Pawel Kowalik <pawel.kowalik@ionos.com>
Date: Mon, 11 Apr 2022 12:41:10 +0200
Message-ID: <CANYDG0uFZ7U8SSu1KdRtsEV2R=cif=R_ezYAGOpot+ggisDt9A@mail.gmail.com>
To: regext@ietf.org
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/regext/nh-I1HfwUbJqxo1ruiLkI59ATxE>
Subject: [regext] Feedback to draft-ietf-regext-rdap-openid-12
X-BeenThere: regext@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Registration Protocols Extensions <regext.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/regext>, <mailto:regext-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/regext/>
List-Post: <mailto:regext@ietf.org>
List-Help: <mailto:regext-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/regext>, <mailto:regext-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Apr 2022 10:41:29 -0000

Hi,

I joined the IETF and this working group quite recently so my comments
to this draft may appear to come a bit late and maybe were a part of
past discussions. Apologies if it is so.
With 10 years of experience in the domains industry and few recent
years activity on identity federations based on id4me protocol, which
is in fact OpenID Connect with DNS-based identifier discovery [1][2],
and also maintaining few implementations of OAuth/OIDC libraries and
OAuth-based tool client software, I think I can support this draft
with valuable input.

TL; DR; Main issues I see around /session/login endpoint being a mix
of RESTful and interactive design, userClaims passed to RDAP client,
purpose claim from Identity Provider and necessity to always provide
id parameter.

In detail:

3.1.2.  Overview
The flow has the main focus on the browser-like client use-case,
whereas rfc7480 specifies RDAP's objective to be possible to use it
with simple scripting tools like "bash and wget".
This assumption introduces few design decisions, which in result
render inconsistent behaviors.
In this terms /session/login end-point is on one side machine-friendly
RESTful API, but in fact renders an HTTP redirect to a human-friendly
interactive authorization website of the OP.
On the other hand using /session/login for any scripting tool will
render many obstacles, starting from the fact that most tools and
frameworks will choose to follow http redirect instead of grabbing the
Location header as an input for the process step.
If the interactive part would be completed in the browser first, one
would need to extract the cookies from the browser and inject them
into the tool of his choice for further usage.
Same if /session/login RESTful API would need to be used by a
human-friendly browser front-end (AJAX), it wouldn't be able to do so
because of the redirect issue. Afaik Javascript in a browser cannot
access http headers.

In fact device flow remains the only working option for the scripting
tool like client, which will limit the number of OPs possible to use
due to this flow not being as common as the standard code flow.

My proposal would be to either make /session/login a fully interactive
flow for humans, without any RESTful elements, or make it fully
RESTful without the interactive part allowing also scripting tool
clients to use the code flow. The second option would be my favorite
however supporting both might be equally useful.
Same design choices were actually made for OAuth2. Authorization
end-point is interactive and meant for humans, while token end-point
is for machine-2-machine interaction.

4.1.1.  Session
The draft specifies "userClaims" object being made available to the RP
client.. What is it good for? Why is it needed? The claims and the
user identity information are necessary for the RDAP server to make
policy decisions about the data access, but not necessarily to the
RDAP client. Avoiding transmission of PII when it's not necessary
would support data minimization principle and increase data security.
Note that the RDAP client might not be controlled by the end user and
the end-user gives consent (in OP authorization step) about his
personal data being shared with the RP (RDAP server) not to the RDAP
client.

If there is no particular reason to keep it I propose to remove the
"userClaims" object.

3.1.4.1.  Stated Purpose
The draft proposes to state purpose in the claims of the user identity
issued by the OP. In my opinion this is very much misplaced. Purpose
describes the reason why the user wants to access certain resources of
the RDAP server.
In the very fine-granular way this is a property of each single RDAP
request, because each request may be issued out of a different
purpose. One may simplify the approach by attaching this property to
the session.
It must not be however attached as a property of an identity. This
would exclude the use case that one and the same user would query RDAP
with different purposes when acting in a different context.
On the other hand, the RDAP server may need additional information
from OP about an identity to determine which authorizations the user
may have. This could be a list of purposes that OP allows the user to
open a session with. Other claims may also be needed for certain
policy decisions, this shall however remain out of scope of this
specification and be mutually agreed between RDAP server and OP.

The proposal would be to add a "purpose" query parameter to
/session/login and /session/device end points and at the same time add
an optional"rdap_allowed_purposes" claim (array of strings) to the
user info claims instead of "purpose" claim.

RDAP server would also need to have certain policies when onboarding
OPs, to know whether "rdap_allowed_purposes" claim can be trusted from
the OP and which values OP is allowed to claim.

4.2.  Client Login
The draft mandates an id parameter/Authorization header with an
identifier of the end-user, which is in turn used to identify the
identity provider used in the authentication process.
This would be useful and workable if the discovery protocol would be
used, however this is not mandated in 3.1.3.1. In practice, especially
if "special purpose" IdPs come into play, one user identifier like
email address may map to several IdPs and the discovery based on id
won't even be possible. Also IdP may choose not to use identifiers at
all (WebAuthN, FIDO or other kinds of passwordless flows) and only
issue privacy-preserving pseudonymous "sub" claims.

In these terms I think it's worth considering the authorization flow
which would be initiated by the RDAP client passing only the
indication of the IdP, through iss parameter, same as OIDC issuer.
id parameter would be optional in this case, I would even propose to
rename it to id_hint to reflect the same behavior of OIDC in this
respect, as there is no obligation for id to match.


[1] https://datatracker.ietf.org/doc/draft-sanz-openid-dns-discovery/
[2] https://datatracker.ietf.org/doc/draft-bertola-dns-openid-pidi-architecture/

Kind Regards,

Pawel Kowalik

Expert Domain Processes and Identity
Domain Services
1&1 IONOS SE | Hinterm Hauptbahnhof 5 | 76137 Karlsruhe | Germany
Phone: +49 721 91374-6571 | Fax: +49 7261 913538
E-mail: pawel.kowalik@ionos.com | Web: www.ionos.de

Hauptsitz Montabaur, Amtsgericht Montabaur, HRB 24498

Vorstand: Hüseyin Dogan, Dr. Martin Endreß, Claudia Frese, Henning
Kettler, Arthur Mai, Matthias Steinberg, Achim Weiß
Aufsichtsratsvorsitzender: Markus Kadelke

Member of United Internet

Diese E-Mail kann vertrauliche und/oder gesetzlich geschützte
Informationen enthalten. Wenn Sie nicht der bestimmungsgemäße Adressat
sind oder diese E-Mail irrtümlich erhalten haben, unterrichten Sie
bitte den Absender und vernichten Sie diese E-Mail. Anderen als dem
bestimmungsgemäßen Adressaten ist untersagt, diese E-Mail zu
speichern, weiterzuleiten oder ihren Inhalt auf welche Weise auch
immer zu verwenden.

This e-mail may contain confidential and/or privileged information. If
you are not the intended recipient of this e-mail, you are hereby
notified that saving, distribution or use of the content of this
e-mail in any way is prohibited. If you have received this e-mail in
error, please notify the sender and delete the e-mail.