Re: [Txauth] adding identity claim schemas (was: XYZ-08 vs XAuth-08)

Mike Jones <Michael.Jones@microsoft.com> Tue, 16 June 2020 01:25 UTC

Return-Path: <Michael.Jones@microsoft.com>
X-Original-To: txauth@ietfa.amsl.com
Delivered-To: txauth@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 825933A0F54 for <txauth@ietfa.amsl.com>; Mon, 15 Jun 2020 18:25:09 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.089
X-Spam-Level:
X-Spam-Status: No, score=-2.089 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_FONT_LOW_CONTRAST=0.001, HTML_MESSAGE=0.001, SPF_PASS=-0.001, T_FILL_THIS_FORM_SHORT=0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=microsoft.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 KuHNm80dWxRI for <txauth@ietfa.amsl.com>; Mon, 15 Jun 2020 18:25:07 -0700 (PDT)
Received: from NAM06-BL2-obe.outbound.protection.outlook.com (mail-eopbgr650113.outbound.protection.outlook.com [40.107.65.113]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 10F693A0F4D for <txauth@ietf.org>; Mon, 15 Jun 2020 18:25:06 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=noh7RBq+i/P3m+7Gm09eki7510cJnHUv3hTVR6NUbYINuV2uKE9xdvdPm44Ma3Ott4CRgMRByWyICau7hD+xlJSQqpn6zhFRNgAfUwVRr4O4lBxE2TcGHmDajkLrRNNYSv8SJj4bc+7oO/W3dBqR1Q3bgnQu2KvDKsbBnbZIEIqv60KL5xzRQxg6Tk8VyBdEkurofSTDN8DyXZ47+CJiibug7iuj5KUxOxZTNuFiNk8hTNeK6RhaXC1S9PxWAMafQo/6JiRnfSU+54uCZboFY3SAxB3bnENfm7FjdajW6xSol7TJLn777G/gtco20OeRnKmh970TRRF3CNiVFWLhhA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TlJoe3EC/z/1d9UljqHQFR2AHGAhqPg/U7DQQkZvE8k=; b=W+fLjQTzObC8LzRPmPNJ6E0UNvUYOJso80k2UX9NqzkP0OH23yKegR8DHIN2wLaJC/Pj5TbjTZ1p3Mq5llUYB3KRyXJO4V1Bgx8VcPjpJGvqfLYCdsbz9wN9g3UByvf6n1ZmG8nuRi04uCONMkSPIa5DeBpeODFBXcyde7p1lsAByBaJ5fy9nP1q1pAuMnQzo2WIc6jb2V5wIin0ONzyUSzjDy7OxKeIpkvQjhla/oHmFwIn3M0uERFaF+85V4iOFN1p3wqnvJq47PhQSzX7a71N/c8JkE+Cj+neSWtyZPCegA5Bgbl1VUyTDaYcW2HMfEGY/pQxrkE4ilEYASMXKQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TlJoe3EC/z/1d9UljqHQFR2AHGAhqPg/U7DQQkZvE8k=; b=b1sgyznWHTc+VmzUAXu0p7pVupoXevPgdW0MOnIssDu36CyrQ2liGrQkFuzHpGsb5t7cUdN8mJ1sF+iK2HiyRLOVXgnbtubij6DWSKNG9or+SgZamZ+Rqswzma44pH1M1MLoZ6TrUd87xPxIxaC95/Xq/o2fmW30W6QXyI6kBow=
Received: from MN2PR00MB0688.namprd00.prod.outlook.com (2603:10b6:208:199::23) by MN2PR00MB0736.namprd00.prod.outlook.com (2603:10b6:208:1dc::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3144.0; Tue, 16 Jun 2020 01:25:05 +0000
Received: from MN2PR00MB0688.namprd00.prod.outlook.com ([fe80::b4e8:a29d:bbae:4d02]) by MN2PR00MB0688.namprd00.prod.outlook.com ([fe80::b4e8:a29d:bbae:4d02%9]) with mapi id 15.20.3145.000; Tue, 16 Jun 2020 01:25:04 +0000
From: Mike Jones <Michael.Jones@microsoft.com>
To: Dick Hardt <dick.hardt@gmail.com>, Justin Richer <jricher@mit.edu>
CC: "txauth@ietf.org" <txauth@ietf.org>
Thread-Topic: [Txauth] adding identity claim schemas (was: XYZ-08 vs XAuth-08)
Thread-Index: AdZDfPNL2HNtAJdVSAquiIHZjxMf4A==
Date: Tue, 16 Jun 2020 01:25:04 +0000
Message-ID: <MN2PR00MB0688FBD38C5B358245B562F7F59D0@MN2PR00MB0688.namprd00.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ActionId=4e8e41da-e0f3-47f3-a5c1-aa4896cdd59f; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=true; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=Internal; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2020-06-16T01:22:42Z; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47;
authentication-results: gmail.com; dkim=none (message not signed) header.d=none;gmail.com; dmarc=none action=none header.from=microsoft.com;
x-originating-ip: [50.47.87.252]
x-ms-publictraffictype: Email
x-ms-office365-filtering-ht: Tenant
x-ms-office365-filtering-correlation-id: 47b2ad83-1957-4e61-e526-08d811941937
x-ms-traffictypediagnostic: MN2PR00MB0736:
x-microsoft-antispam-prvs: <MN2PR00MB07369FA2FBDCD7C3819A6E72F59D0@MN2PR00MB0736.namprd00.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:4714;
x-forefront-prvs: 04362AC73B
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: K0zAFOvw5beW0X1lDVlT78ClALoA4n8RhS2PBfiGLNddO4CoTmV9uPlEGz28aqhiM4eVhE12TZVpCNkGAS6zItALyXTZaLDvWJq2ufuBRJgwFq3VMWNp4CVNDzb5mYWYBASsuAVZ8WjBtoDTl1bUT2+Jka560W5ZxTVR7/3wX52QtgbeXIQJf9G16PEOSTXwUkw0eDfmXIkuirG4E2s+o6+WLJIqisb9mbZ1uHzBNBDj6e+Gr7EqHfYHhN7yYlVLVug5LwG6abJ0DGwUGcuNv9leXkiqRS/i2dghsyTpgkENhY6WD0XP61b/3jy1f+duajZLTgHCy5DxmJaEaDGZspXrcltZQhU/KpgZs4ad+k3ZffBJTZ7Z/mtYXEMeDOwupkPe5q8Opz1I/6eLaFb1lTyNqEYHx27CI/bH+1DEZzaO4Zf7UbAQok9qMSpz0a/BS5G4/ttRWvToB/xQBtqZ/ewDViscf7qs4pgh6NzB5I93walXv5MRBz1tt4C7b8nd
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR00MB0688.namprd00.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(346002)(376002)(366004)(136003)(39860400002)(209900001)(53546011)(6506007)(186003)(26005)(966005)(83380400001)(316002)(82950400001)(71200400001)(86362001)(83080400001)(19273905006)(82960400001)(64756008)(110136005)(9686003)(166002)(478600001)(8990500004)(2906002)(8676002)(4326008)(5660300002)(66476007)(33656002)(66946007)(76116006)(8936002)(66556008)(66446008)(55016002)(52536014)(10290500003)(7696005)(99710200001)(563064011)(6606295002); DIR:OUT; SFP:1102;
x-ms-exchange-antispam-messagedata: ULeIDdqJ5aPO7cFRkSaPUQ1NwvVjMNyv7lsl8oy3X5VecP9ztpRWJN0FGYmenVy5R5hxLsBE3VL/0FlvCnxiegYV2uW1oTe6ABVVcZ8lSaDftij7dR9kpZaQ5rt81TNlZvd0bHUnv7DErnMC1JHohwyoYcWufoTYGUVHmzG9+Dhl5iAs6g6Rw67LZ23QY63wbZmWJ9L9QDV3CyyuhPCsTDpV8qFaxKwlR2ptydQD4xEv846d7LSf5SsSsiCjRZcvi9k514BMGN+chqmGIyFxUWM7BQoURvU0//E9hiL6VhLMvoECe1oPuTSzeNTJACr7f4HBg0jCS1uv12hwrJOZ2qjSjtl0uoXIyAmDw4uQaABJ9IZEMJf9vHnhLCctYJLIaWisGPMRLUDgeSqJGH4Leh1oGHgnvcvkiaNGED80G4uKws1v/EAPEJbmQ+e4lKasSQC9PvYLVSwshNK0YBTbqK0NLfU5bBtyvjf3kw4Mk9A=
x-ms-exchange-transport-forked: True
Content-Type: multipart/alternative; boundary="_000_MN2PR00MB0688FBD38C5B358245B562F7F59D0MN2PR00MB0688namp_"
MIME-Version: 1.0
X-OriginatorOrg: microsoft.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: MN2PR00MB0688.namprd00.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 47b2ad83-1957-4e61-e526-08d811941937
X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jun 2020 01:25:04.7884 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: TJQFNIBtnX4Wx/5Fla+LfmChkeIl86kFu/0kh6B1kf1k4hI9yi7ebOoc7+Kk8zOY3Wq5NFPKkXYPxvdtF7wrjw==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR00MB0736
Archived-At: <https://mailarchive.ietf.org/arch/msg/txauth/U3sEaLo77CY66xG1wAvIt9bfVJA>
Subject: Re: [Txauth] adding identity claim schemas (was: XYZ-08 vs XAuth-08)
X-BeenThere: txauth@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <txauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/txauth>, <mailto:txauth-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/txauth/>
List-Post: <mailto:txauth@ietf.org>
List-Help: <mailto:txauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/txauth>, <mailto:txauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 16 Jun 2020 01:25:10 -0000

I completely agree with Dick that, as written, XYZ is defining a new ad-hoc identity schema, which is unnecessary and counter-productive (and probably violates our charter).

I agree that explicitly reusing existing claims schemas, rather than inventing new ones, is one of the clear and compelling advantages of XAuth over XYZ.  I’d previously suggested that the Claims section of XYZ<https://tools.ietf.org/html/draft-richer-transactional-authz-08#section-2.7> be revised to not define new “email” and “subject” claims with an unknown schema but that hasn’t been done.  Other instances of this problem occur in the XYZ Transaction Request<https://tools.ietf.org/html/draft-richer-transactional-authz-08#section-2> and Transaction Response<https://tools.ietf.org/html/draft-richer-transactional-authz-08#section-8> sections.

Getting this right matters.

                                                       -- Mike

From: Dick Hardt <dick.hardt@gmail.com>
Sent: Monday, June 15, 2020 5:39 PM
To: Justin Richer <jricher@mit.edu>
Cc: txauth@ietf.org; Mike Jones <Michael.Jones@microsoft.com>
Subject: Re: [Txauth] adding identity claim schemas (was: XYZ-08 vs XAuth-08)

comments inline ...

On Wed, Jun 10, 2020 at 8:07 AM Justin Richer <jricher@mit.edu<mailto:jricher@mit.edu>> wrote:



On Jun 9, 2020, at 4:14 PM, Dick Hardt <dick.hardt@gmail.com<mailto:dick.hardt@gmail.com>> wrote:

Forking this topic to a new thread

+Mike as he has expressed concern about creating new identity claims

On Tue, Jun 9, 2020 at 9:10 AM Justin Richer <jricher@mit.edu<mailto:jricher@mit.edu>> wrote:



On Jun 8, 2020, at 5:33 PM, Dick Hardt <dick.hardt@gmail.com<mailto:dick.hardt@gmail.com>> wrote:



On Mon, Jun 8, 2020 at 1:02 PM Justin Richer <jricher@mit.edu<mailto:jricher@mit.edu>> wrote:

<snip>
I don't follow how this would work. Perhaps you could provide an example in JSON?

One method is defining a new value inside the XYZ “claims” request object that maps to a specific sub-schema:

claims: {
   “subject”: true,
   “email”: true,
   “oidc”: {
       "userinfo":
        {
         "given_name": {"essential": true},
         "nickname": null,
         "email": {"essential": true},
         "email_verified": {"essential": true},
         "picture": null,
         "http://example.info/claims/groups": null
        },
       "id_token":
        {
         "auth_time": {"essential": true},
         "acr": {"values": ["urn:mace:incommon:iap:silver"] }
        }
      }
}

That should look pretty familiar. Alternatively, this could be done with a separate top-level request object field:


claims: {
   “subject”: true,
   “email”: true
},
“oidc_claims_request”: {
       "userinfo":
        {
         "given_name": {"essential": true},
         "nickname": null,
         "email": {"essential": true},
         "email_verified": {"essential": true},
         "picture": null,
         "http://example.info/claims/groups": null
        },
       "id_token":
        {
         "auth_time": {"essential": true},
         "acr": {"values": ["urn:mace:incommon:iap:silver"] }
        }
}

In both cases the AS is going to need to knit them together into a sensible request policy, especially since the OIDC claims query language has overlapping implications to one particular resource, the UserInfo endpoint. My contention wasn’t with your proposed solution, my contention was you claiming that XYZ has a fixed schema and is therefore limited in extensibility.

One of the objectives of this work is to have extension points. My point was that XAuth had a clear extension point for adding schemas. How to extend XYZ was not clear in your proposal.


I am sorry that the extensibility of the protocol was not clear. It is stated in each section that additional items can be added, and I have stated repeatedly that it’s extensible and demonstrated how, here on this list.


I think the XAuth proposal is better than the two examples you proposed. In your first example, the schema is a second class schema, and in your second example, claims are spread across to top level options. Both of these pollute other schemas.


Not surprisingly, I disagree about the cleanliness of XAuth’s proposed approach. The proposal here adds external schemas as extensions instead of relying on them internally.

If anything, I think that the OpenID Foundation would be the ones to define how to make an OIDC claims request using this protocol, not us, since they own and control that query syntax and everything it implies. We can provide a means of extension.

I also think there’s value in defining a set of core interoperable identity fields, which themselves could also be extended.

All of these mechanisms should be controlled by some combination of registries and collision-resistant namespaces, which is the approach I’ve taken for extensibility throughout XYZ.


JSON by its nature is extensible. Adding new members to an object is straight forward. XYZ is not unique here. It sounds like your idea of extensibility is telling people that they can add new members to JSON. Of course they can. That is like saying you can add new query parameters to a front channel OAuth 2 request.


Yes, exactly. And that’s exactly how OAuth 2 has been extended. I’m glad you see that now.

I think you are missing my point. Adding query parameters to OAuth 2 was not a defined extension point. It was inherent in how query parameters work. OAuth 2 did define the type of grant as an extension point.



My concern was that XYZ does not have a clear way to add new identity claim schemas. You have two examples, add a schema as a member of the claims object, which is mixing claims with schema extensions, or adding a root member, which is then putting claims into more than one place. It is not clear where to add a new schema, so we could easily end up with new schemas in both places. That sounds confusing.

In XAuth, the members of the claims object are the schema. Adding a new schema is done one, consistent way.

I provided a couple examples off the cuff of possible ways to extend something, as your base claim was that XYZ could not be extended with new or external query schemas. Of the two, I think that it makes more sense for it to be a separate top-level object. Why? Because the OIDC “claims” request syntax not only dictates claims within the OIDC schema, it also specifies how the information comes back. The XYZ claims request talks about information that comes back in the XYZ claims section of the response.

I would put the OIDC request to acquire claims from a user_info endpoint into the authorization request so that there is a consistent way to get back an access token, as opposed to a new top level object that could return claims and/or an access token.

Since the OIDC request allows for targeting specifically to the ID token and UserInfo Endpoint, I think it is much cleaner to be at the top level as its own thing.

My point is that XYZ does not define how to add new schemas. An extension can add anything it wants to the JSON, and as you have shown there is more than one way to do it, and I think long term when there are divergent mechanisms, the code is going to get ugly in detecting what claims are being asked for.





wrt. "defining a set of core interoperable identity fields", the charter says we should be NOT develop a new schema:

The group is chartered to develop mechanisms for conveying identity information within the protocol including identifiers (such as email addresses, phone numbers, usernames, and subject identifiers) and assertions (such as OpenID Connect ID Tokens, SAML Assertions, and Verifiable Credentials). The group is not chartered to develop new formats for identifiers or assertions, nor is the group chartered to develop schemas for user information, profiles, or other identity attributes, unless a viable existing format is not available.

wrt. OIDC claims, the charter explicitly calls out developing mechanisms for conveying ... OIDC ID Tokens.

[https://mailfoogae.appspot.com/t?sender=aZGljay5oYXJkdEBnbWFpbC5jb20%3D&type=zerocontent&guid=60b8032d-e061-464e-afbb-1a82abd02f21]ᐧ

Precisely: the charter says we will have a way to convey identifiers and assertions. The XYZ “claims” section lists identifiers that can come back, in plain text, and assertions, that can also come back along side them.

These claims are a schema. We will have an IANA entry for what claims are allowed inside of the claims object. This is defining a new schema.

It’s not a full query language and isn’t intended to be, and I think that it would actually be dangerous for this to be a full identity schema, but it is itself extensible internally if someone wants to do that. Claiming that a list of identifiers is “developing a new schema” is an argument several bridges too far from reality.

You are not inventing new identifiers, but you will be defining which strings are being used to represent which concepts. FOr example you have "email" vs "email_address", or any other string combination that a human would likely interpret as an email like object.  Then there is specifying what can be in the field.

I picked a couple examples out of thin air, with the idea that we’d bikeshed them eventually and tie them to a registry. We might want to re-use a set of identifiers here, and for that I actually like Annabelle Backman’s proposal to the SECEVENT group better than most that I’ve seen in the space:

https://tools.ietf.org/html/draft-ietf-secevent-subject-identifiers

That is one schema. And it has advantages for the subject identifiers, but obviously does not cover the wide array of other identity attributes.

Why would we not want to reuse existing schemas? And support all of them?



[https://mailfoogae.appspot.com/t?sender=aZGljay5oYXJkdEBnbWFpbC5jb20%3D&type=zerocontent&guid=ce3e18dc-5740-4cdd-a3b2-69aa92e7755d]ᐧ