Re: [Wimse] Request Binding Proofs for Workload Identities

Pieter Kasselman <pieter.kasselman@microsoft.com> Mon, 04 December 2023 19:18 UTC

Return-Path: <pieter.kasselman@microsoft.com>
X-Original-To: wimse@ietfa.amsl.com
Delivered-To: wimse@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0B2B2C14CF01 for <wimse@ietfa.amsl.com>; Mon, 4 Dec 2023 11:18:14 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.099
X-Spam-Level:
X-Spam-Status: No, score=-2.099 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_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=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 ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id O01fQE0rT4TO for <wimse@ietfa.amsl.com>; Mon, 4 Dec 2023 11:18:10 -0800 (PST)
Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2131.outbound.protection.outlook.com [40.107.247.131]) (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 88CE1C14CE30 for <wimse@ietf.org>; Mon, 4 Dec 2023 11:17:52 -0800 (PST)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X19H40RO5zI+/5qUyvgeAhPhg7ARvd5rWemFRT6Rpv6qJqdRy4/mdrkZB4YUipLs9FkM1rWnoQMU18ZP9TsPTN+fx1fNprv0ASt6LMf/a1qeVLVWqjPddgO/tWMnV7EVbYuZnFwk+bpkenzcBPWfTYPC2MzRzNjJlUahkwo1Ssrw5sdKxEIjHR5Z04SXXC2VxAndqbPvkst2ju8Uojh52quStaWdjvROMxvXfu+FSccoX3jh20x2k8hK+q+ejRq5P8Bp0UVigWHXJ43geOo+bcJ4tvaJ+vnIvYejd91T/uIDg5qxD3JmYsPuLdT2STg7W9yCxtbB9Z/9bZkfR9saHg==
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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QGP5sBiRa9beU205qIy6HCQu4IrRSrTWczDqEEIXkX4=; b=lGkH1ZF9vzu2tN3/RF+9KSsqrqfRMO+BPRfaLTwmU3agGu/eah705OOQWn0+PbzezQF5iGlvTqQbGUg+cQ8ykITtUYlR2ZuLZw1ePUpOz+MkrH+VHha57r2QYUFFwdwYY7OtkBlEYWNThHiyzRe82JCIwUu0uhE5dN55xc3yw72AtBEt102c4Ikg4jVBUTafE2wyp8Y10loBdyGjGlZCwq8H0zEElfiOIfdChCs22QJ4/UwIbK7TZWH/Uqe9jkiCtfHvn4Sdy3ypP1ZGM5CmfrqM+AaSyNbabrJwCe0G6uKA7pzBpsvgoTJm5NU15hqG0tFSJkNqHx2P33JcpK4XkQ==
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=QGP5sBiRa9beU205qIy6HCQu4IrRSrTWczDqEEIXkX4=; b=Vefzz0FYiJ43O7bAYw0ldKeNx6LqBm/BRmPUrE+4SKDM8o+4oipqgn2DE3Kkkmpc0iA/894CXsnPwW4xpSYLIz2DA91nVIC2aNAw4e/LO0iOixQINhTg7TnL7x4DgN64a4jAhbE6QKBooq7vSq5HbU1TarPFaYfXNT69cXykErU=
Received: from DBAPR83MB0422.EURPRD83.prod.outlook.com (2603:10a6:10:195::11) by AM7PR83MB0452.EURPRD83.prod.outlook.com (2603:10a6:20b:1b6::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7091.5; Mon, 4 Dec 2023 19:17:48 +0000
Received: from DBAPR83MB0422.EURPRD83.prod.outlook.com ([fe80::c70a:7598:17f:db3d]) by DBAPR83MB0422.EURPRD83.prod.outlook.com ([fe80::c70a:7598:17f:db3d%3]) with mapi id 15.20.7091.001; Mon, 4 Dec 2023 19:17:47 +0000
From: Pieter Kasselman <pieter.kasselman@microsoft.com>
To: Joseph Salowey <joe@salowey.net>
CC: Hannes Tschofenig <hannes.tschofenig@gmx.net>, "wimse@ietf.org" <wimse@ietf.org>
Thread-Topic: [Wimse] Request Binding Proofs for Workload Identities
Thread-Index: AdoiPglKPvb+0KT+TgWzxUZxhwGungAm9X6AAGSighAAchzygAAUvV0AABclOIAAAC1oUA==
Date: Mon, 04 Dec 2023 19:17:47 +0000
Message-ID: <DBAPR83MB04229E0F82FE16BAF551792C9186A@DBAPR83MB0422.EURPRD83.prod.outlook.com>
References: <DBAPR83MB0422F6D97F9CF28A8FE303EC91BCA@DBAPR83MB0422.EURPRD83.prod.outlook.com> <1577f4bb-a1d5-4035-b274-2a89aafcebf4@gmx.net> <DBAPR83MB0422109C0A23D63D83A490989181A@DBAPR83MB0422.EURPRD83.prod.outlook.com> <CAOgPGoDTQjBz61WR+iOzFL=hvLxA_p9JMgtnhbmww9c2TNmkRQ@mail.gmail.com> <DBAPR83MB04227D9FDAE954D3CD4BCFAF9186A@DBAPR83MB0422.EURPRD83.prod.outlook.com> <CAOgPGoCHui14ftKJ23WX8KiYjP2LYcez-1XV5pm46mm1BJbajQ@mail.gmail.com>
In-Reply-To: <CAOgPGoCHui14ftKJ23WX8KiYjP2LYcez-1XV5pm46mm1BJbajQ@mail.gmail.com>
Accept-Language: en-IE, en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ActionId=46291f49-63ba-4454-b234-32313c9ad604; 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=2023-12-04T19:07:23Z; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47;
authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: DBAPR83MB0422:EE_|AM7PR83MB0452:EE_
x-ms-office365-filtering-correlation-id: aa1b2d08-7381-4d84-72ce-08dbf4fdb335
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: vk+zk3gqeo/NFtIQIA2A5dlmN990oRKZRG5+0/2RbABz4E/ofBQN6N0SlAW58yiaTjRcPfwxC/Uc6Iv54pFTBmJ0NyvuhM9x4c5qGWk4oItgxfuxQuoWGeOKttIfc6Rxi20y/G9g2oV76F9JrEXwv6wvHEgoogmsl+oJv75Sg6sq8ybtph/D+0RZd8RQDQIjICDd5AzSQNM5KVqj1qsH4C7+ovv04SgubGsNHy0dpe2RfTuXlvZOa+rpwsf/nP5me+e0nFh/a1A6PMJB6BJFIT6Y4eydFAuIbYisjMWhfel10aB4Xqawor5Lrwvx+YKwzc2qOAqfPiFz6NfIRZ508Al4qgzAjLRhUcEleOyW2NWMwLZ+WdNligI25KXwtuojxMm06qcGdvleBwuR4P/wfaU17je+NXBSZ7/BkOnWMMLw/CE61qtzOJAJ9Hi3xNedfFny/ztfSbJUn3xH23UYbhPaL4KnPcQSJ1cGSeGOsKZdCAe3MFDhCvy/0RrTr9xSInHNsjk/a3mt7GeEk07Svzby3cghAFI17VkSXWt648hsEs2iVx83d9qMKRvyphnbXp4mnlEre2vN+UroTStHI736cNvAGMZeHIlSRM+W5qT5OKoixILxdPc9Ea2HVZJSMuNJeVLwM5mKldr09+BtQQ==
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DBAPR83MB0422.EURPRD83.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(39860400002)(376002)(396003)(136003)(346002)(366004)(230922051799003)(451199024)(64100799003)(1800799012)(186009)(122000001)(2906002)(38100700002)(5660300002)(30864003)(82960400001)(82950400001)(8990500004)(166002)(41300700001)(86362001)(26005)(478600001)(10290500003)(966005)(83380400001)(38070700009)(53546011)(55016003)(7696005)(9686003)(6506007)(33656002)(71200400001)(52536014)(8936002)(4326008)(8676002)(44832011)(6916009)(316002)(66476007)(66556008)(66946007)(66446008)(76116006)(64756008)(54906003); DIR:OUT; SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: Wcx5w/1IC0CLJCOD0urBGcyVG0an9f5JYhxLaJHhVy6qBdykgYIoN58Z6KN6vn6zLsjo0fIQa4Hwu/LsExNjdqLP9jyFFODA9me+IJXQRhFxcB3H1gQ93VIh2UefBL1+/Ou8QgzlK6OU9ayOF8QUu/cZlvQ4HbXXbcmtgtB0oUoqAJCdcH6Alu6p22hV+ZFCM3812eOgGQoZeGOFOks3LKKdCbu3WD5E0mFqea9UPtZVUn2wITTn1uV2ZtcWHEriHMi9NpWz47VTvnqYL7pS2D8CNaKIEbBlX6UHquEiwEE0zt8FY8p3jrFpjXJ90ecRAzIGUbH+gujYBkR7P4lH6klqImCPgkDfohVO5Uyy0rNx0Yl5c/jkh1gqr6PvxKgox/9Xqc6jHxT1wIClRR+0yrGWIrqF0UIh0k39hhJXGCHv+8wGtVMKpi081atU9cuhxYsgfsLYLXvz+2rvVpj1zyv/RHjr7fOWdZpmgj1onVkFdzFS8qTfJtMr9cYYU+/CEsvu1wmNF2FfJBW1v775RMkx4okOozt0c6QR90h0uE5X9xvtwHmbZDPe2TjMI6/Jk9P0t4iKT+vqfG85LR4SAnCHovqNtOTLVZqil+DtGEJpuPXhUkiyHomy0aJPhPfk9EPmvvy/G/k5QGPZan4piF9CZahYNalI9WWVfxLCdS/FB9RIPtUt5P8xh50eatPbHDgO2yrpGdGAYXVSHni7SXTTct9PampaZC/x1Yjcs+hjAz5YdNmW5Cus+DVkmDl7jc1SC7Yil/rmgURoPgaTZmDw1+3NBbMzI4n95kQ2cBfTzxkjVDq9mz4GWGFlfFOzqQ8Z57wUcewYv3dfjsn6Dbo5XjoVfTn1iGL/BpVpuqGDspzk1LhUrSB5NpFTFzVkkl1rUiFIJ0dgnkqjK/qUGXmLIyUpQ15zTxEApcOlaqRkQSR0HtcPNAQIR60LeFUha76pYgj64n13K4z7Ck5C+bTbZQL5fm9z2KD8eMrlt7BhWB1b/6s6U38MrMmqlq5v5eL0OhvtA6YD7PYUApZ6A5OP49cIW0m/U1bJ9VJrbmJSNKySM29hnTiQzZY+l/WLx3KLNzlqtrh0+YAgMe0n89r1OXLDMrZyjY41ZT8sp9Klntao5+b1M59scssmur0gvzQYCT1BI3LPB1yDHLF4y5T4YH1R3UeY01Hsz5NqiNEWdD7oTr98rmyXFt1abxwlZ1kaCzzZ3dOxw4DxOy0TEBMyyUPe5RSVLYWOwEzsb4SdpfbRyC1vhoWNrCfCh1Rla+dBS6mNdnVJ+6/rMvw46jtUyEZ6oisbEZGgc6mwGNT1rEaYJomiE1uW94flSzIhCpBAQfneR8YZDj1BGnrd2DcE+wlv9Xc8SsCJs9swRW+gOAFs4+v2sVt8eImrsFRwzwZqHYqjbXSG92DbzyDZJl0Pj8liZTf2Z6vgxwLUAgTUPBP6ukznSAKw2W6Y9GP7tUSOpZK5bm890QKTDlAUHuHpMH1l9KVmv80lhd3H3Rqj1JRNUJklrHyUCpdCW/Kn
Content-Type: multipart/alternative; boundary="_000_DBAPR83MB04229E0F82FE16BAF551792C9186ADBAPR83MB0422EURP_"
MIME-Version: 1.0
X-OriginatorOrg: microsoft.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: DBAPR83MB0422.EURPRD83.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: aa1b2d08-7381-4d84-72ce-08dbf4fdb335
X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Dec 2023 19:17:47.3090 (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: N1pMnwGlBrm1Oln4zJOeHoNodvv9Ot/oEOMmLcTmb6bxmIM3Q5QMBKxv3HPwDjZOwUxlJgwKt3c8FmuL3XKPkhbcnC6BAFQz7ZrhVavYWsM=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR83MB0452
Archived-At: <https://mailarchive.ietf.org/arch/msg/wimse/rpn8sXGk4bsehphGtPEwQ3KhLho>
Subject: Re: [Wimse] Request Binding Proofs for Workload Identities
X-BeenThere: wimse@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: WIMSE Workload Identity in Multi-Service Environment <wimse.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/wimse>, <mailto:wimse-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/wimse/>
List-Post: <mailto:wimse@ietf.org>
List-Help: <mailto:wimse-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/wimse>, <mailto:wimse-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 04 Dec 2023 19:18:14 -0000

Hi Joe

I agree, once we include the public key as a claim in the JWT, it shares some characteristics with a cert. I don’t think we need to go down the path of trying to make an equivalent to a cert though, but we should think through the implications (e.g. should there be a constraint on how the key is used, or do we make that implicit, given that the keys are short lived, can we skip CRL equivalents like StatusList and so on). I would be a proponent for keeping things as light as possible (but no lighter ofcourse). With SPIFFE, at least, there is already mechanisms for distributing the X.509 SVIDs and JWT SVIDs, so perhaps those can be re-used. I would be in favour of separating the spec for the binding mechanism from any specs that reason over key management, as this may be addressed differently by different systems.

Agreed that we should allow for the cases where X.509 is deployed. I am less sure about more MTLS bindings as we have the X.509 SVIDs for that and the break and inspect proxy challenge is the reason we need the JWT solution. So perhaps in terms of scope, for this proposal, I would propose keeping it narrow to the JWT only solution (with allowance for attaching the X.509 cert through thumbprint or URL for those deployments that use it already).

Cheers

Pieter

From: Joseph Salowey <joe@salowey.net>
Sent: Monday, December 4, 2023 8:02 PM
To: Pieter Kasselman <pieter.kasselman@microsoft.com>
Cc: Hannes Tschofenig <hannes.tschofenig@gmx.net>; wimse@ietf.org
Subject: Re: [Wimse] Request Binding Proofs for Workload Identities



On Mon, Dec 4, 2023 at 12:12 AM Pieter Kasselman <pieter.kasselman@microsoft.com<mailto:pieter.kasselman@microsoft.com>> wrote:
Thanks Joe

I would prefer to keep the proposal more generic to JWTs as well, and perhaps use JWT-SVID in SPIFFE environments as the worked example.

I originally thought we might just reference the keys, rather than including them in the JWT (JWT-SVID) to reduce size. But as you point out, there is a ton of key management problems that comes with that, including distributing the public keys for verification and keeping them up to date, which will introduce both latency and resiliency problems.


[Joe] So essentially the JWT is a certificate in a sense that it binds the public key to some information.  There still needs to be some management to keep the jwt and its private key up to date.  I

I think going down the path of including the key in the JWT would ensure it is always available, even if a key was rotated previously. I think we can allow for re-using the X.509 SVIDs, or other X.509 certs – there are several options for referencing X.509 in JWTs already. The downside is increasing the JWT size (which has bandwidth and COGS implications at scale). We also end up dragging X.509 cert validation into the mix, which will have to be handled at the application layer (this has proven challenging to developers from past experience). I think we can include it, but perhaps also have an option to include only the key.

[Joe] I think there will be folks who are using X509 deployments and it would be good to figure out how to integrate with those. Perhaps there are things we can leverage with mTLS.  Your suggestion of using x5u or x5t could help keep the jwt size more manageable.

In other cases we'll need a "jwt-only" solution which will have to involve some key management of the jwt and its key-pair.  It's not clear to me how much of this exists already vs. needs to be defined as part of this work.


Thoughts?

Cheers

Pieter

From: Joseph Salowey <joe@salowey.net<mailto:joe@salowey.net>>
Sent: Sunday, December 3, 2023 11:06 PM
To: Pieter Kasselman <pieter.kasselman@microsoft.com<mailto:pieter.kasselman@microsoft.com>>
Cc: Hannes Tschofenig <hannes.tschofenig@gmx.net<mailto:hannes.tschofenig@gmx.net>>; wimse@ietf.org<mailto:wimse@ietf.org>
Subject: Re: [Wimse] Request Binding Proofs for Workload Identities



On Fri, Dec 1, 2023 at 7:54 AM Pieter Kasselman <pieter.kasselman=40microsoft.com@dmarc.ietf.org<mailto:40microsoft.com@dmarc.ietf.org>> wrote:
Hi Hannes

I think we may want to distinguish between the different kinds of tokens that are being used and the different purposes they are being used for.

This proposal is not about making replay of OAuth Access Tokens, which carries authorization information, detectable. We have solutions for that (e.g. DPoP).

The use cases I had in mind was more about those cases where tokens (in JWT format) is used for identification\authentication scenarios. The JWT-SVID is an example of this. Imagine a chain of workloads A->B->C. The idea is that if Workload A authenticates to B with their token, and B then uses A’s token to impersonate A to C, C can detect it (and preferably reject it, or at least take it into account when making the authorization decision, which may include other information from a transaction token, time of day, the risk management engine and so forth). The proposal is to create a proof (a JWS signature) that contains claims about the request. If workload B presents workload A’s JWT to workload C, it will be unable to produce a proof that binds it to the latest request.

Perhaps we should just be as specific as calling it “Request Binding Proofs for JWT SVIDs”, although I was hoping we could be a little more generic as there are bound to be other places where JWTs are being used for authentication in this way.

[Joe] I don't think we should tie this solely to JWT SVIDs, it can have broader applicability.

In the description above I believe the proof is explicitly attached to a key (raw key or key in the form of an X.509 cert).  There is a trend for deployments to move to shorter lived keys; will this result in failures due to key rotation.  Should we include binding to a service identity as an alternative and require that the identity be attached to an authentication credential which requires strong proof of possession like an X509 SPIFFE Svid?



Does that help?

Cheers

Pieter

From: Hannes Tschofenig <hannes.tschofenig@gmx.net<mailto:hannes.tschofenig@gmx.net>>
Sent: Wednesday, November 29, 2023 3:37 PM
To: Pieter Kasselman <pieter.kasselman@microsoft.com<mailto:pieter.kasselman@microsoft.com>>; wimse@ietf.org<mailto:wimse@ietf.org>
Subject: Re: [Wimse] Request Binding Proofs for Workload Identities


Hi Pieter,


Am 28.11.2023 um 22:13 schrieb Pieter Kasselman:
Hi folks

The Constrained Credential Security use case that we identified in draft-gilman-wimse-use-cases-00 - Workload Identity Use Cases (ietf.org)<https://datatracker.ietf.org/doc/draft-gilman-wimse-use-cases/> has been coming up in a number of discussions. The absence of any good mitigations is considered a risk, and given the prevalence of token theft along with the attractiveness of a compromised workload identity, not an entirely unjustified one.



I would like to suggest a different term for this use case, something like "capability restricted token" or "Tokens with reduced permissions". I think this describes it much better since you are talking about limiting the impact of token theft. The text in Section 4.10 of the OAuth Security BCP then come to  mind as possible solutions, such as sender-constrained access tokens or audience-restricted access tokens.



Before going into the details of your solution, I am wondering whether you are expecting



a) the "control plane" to provide a PoP-based service account token to the workload, or

b) that the authorization server provides the PoP token to the workload when the workload presents the service account token.



(Note that I am using the terms from <draft-hofmann-wimse-workload-identity-bcp> to refer to the two different entities issuing tokens.)



Ciao

Hannes


In SPIFFE, for example, it would be highly desirable to have a way to bind a JWT SVID to a transaction to enable workloads and cloud resources to detect if the JWT SVID is being replayed, and if it is, to take it into account when making an authorization decision (e.g. transaction with JWT SVIDs that are being replayed are rejected). Existing mechanism like DPoP that provide similar functionality to sender constrain Access Tokens does not quite work (for reasons that Evan Gilman outlined in the BoF session).

Proposed WIMSE Deliverable
---------------------------------------
One proposal to address this is to introduce the concept of a Request Binding Proof. A Request Binding Proof cryptographically binds a JWT (e.g. JWT SVID) to a request in such a way that the JWT cannot be used with another request without being detected by the recipient of the JWT. When a workload makes a request to another workload or resource, it presents its JWT credential (e.g. a JWT SVID), along with a Request Binding Proof. The receiving workload will use the JWT as a way to authenticate the calling workload and then verify that the Request Binding Proof to ensure the JWT is used in the context of the current request. A specific application of this binding mechanism is to bind a SPIFFE Verifiable Identity Document JWT (SVID JWT) to a request. I would like to propose that the creation of a standard for a Request Binding Proof should be a WIMSE deliverable.

Strawman
--------------
Making a quick strawman sketch of what a transaction binding proof might look like, includes:


  1.  Include a reference to a public key or the public key itself  to JWT used by the workload (e.g. the JWT SVID does not include a public key today)
  2.  Define a request binding proof by profiling the JSON Web Signature (JWS) specification to contain specific claims that can be bound to the request.

Some additional ideas below:

Workload JWT claims (e.g. used as part of a JWT SVID extension)
--------------------------------------------------------------------------------------
To support request binding, JWTs MUST include a kid claim as defined in https://datatracker.ietf.org/doc/html/rfc7515#section-4.1.4 (open question, can this be the X5u or X5t parameter representing the X.509 SVID)?

Request Binding Proof
-----------------------------
The Request Binding Proof is a JWT [RFC7519] that is signed (using JSON Web Signature (JWS) [RFC7515]) with a private key chosen by the workload. The JOSE Header of a Request Binding Proof MUST contain at least the following parameters:

  1.  typ: A field with the value dpop+jwt, which explicitly types the DPoP proof JWT as recommended in Section 3.11 of [RFC8725].
  2.  alg: An identifier for a JWS asymmetric digital signature algorithm from [IANA.JOSE.ALGS]. It MUST NOT be none or an identifier for a symmetric algorithm (Message Authentication Code (MAC)).
  3.  kid: Claim indicating which key was used to secure the JWS. It must match the kid claim in the JWT SVID (open question, can this be the X5u or X5t parameter representing the X.509 SVID).
The JWS payload contains the following claims:

  1.  iat (Issued At): The timestamp at which the Transaction Binding proof was created (REQUIRED)
  2.  jti (JWT ID): A unique identifier for the JWT to mitigate replay attacks (REQUIRED).
  3.  tth: Hash of the Transaction Token (see transaction token draft: https://datatracker.ietf.org/doc/draft-tulshibagwale-oauth-transaction-tokens/ ). The value MUST be the result of a base64url encoding (as defined in Section 2 of [RFC7515]) the SHA-256 [SHS] hash of the ASCII encoding of the associated access token's value. (OPTIONAL)
  4.  rqd: A claim, whose value is a JSON object the describes the request details bound to the workload identity. The contents of the rqd claim changes, depending on the typeof request.

The JSON value of the rqd claim MAY include the following values, depending on the request type (these are meant to illustrative and may not be the most appropriate, correct or sufficient – a topic for discussion):

  1.  htm: The value of the HTTP method (Section 9.1 of [RFC9110]) of the request to which the JWT is attached. This value MUST be used if the request is an HTTP request.
  2.  htu: The HTTP target URI (Section 7.1 of [RFC9110]) of the request to which the JWT is attached, without query and fragment parts. This value MUST be used if the request is an HTTP request.
  3.  krt: The Kafka Request Type. This value MUST be used if this is a Kafka request.
  4.  ktn: The Kafka Topic name to which the request is being directed. This value MUST be used if this is a Kafka request.
  5.  ktp: The Kafka Partition within a topic. This value MUST be used if this is a Kafka request.
  6.  gsm: The gRPC service method. This value MUST be used if this is a gRPC request.
  7.  Other?
The proof is generated by using the private key corresponding to the kid claim in the JWT (e.g. JWT SVID) to sign over the JWT Request Binding Proof (more details to be added).
The Request Binding Proof is verified by using the public key corresponding to the kid claim in the JWT (e.g. JWT SVID) to verify the Transaction Binding Proof. In addition to the cryptographic verification, the verifier MUST verify that:

  1.  The kid claim in the JWT SVID equals the kid claim in the Transaction Bindng Proof
  2.  The iat claim is in the accepted boundaries (less than 5 minutes old).
  3.  The tth claim matches the hash of the Transaction Token hash, if one is used.
  4.  The rqd claim contents matches the actual request details (e.g. htm and htu parameters match).
  5.  Additional verification steps to be added
I would be happy to expand on the above and turn it into a ID draft if there is interest in pursuing this further in WIMSE or elsewhere.
Cheers
Pieter





--
Wimse mailing list
Wimse@ietf.org<mailto:Wimse@ietf.org>
https://www.ietf.org/mailman/listinfo/wimse