I am implementing OAuth 2.0 with JWT in my application and am having trouble deciding what to set as my aud
claim as. A user will "login" to my client via my authentication server to gain access to my API (resource) server. I want my tokens to only be valid for use with a specific client and specific API.
When logging in from my client, I include it't client_id
in the request, but in most implementations I've found, the aud
is set to that client_id
. I'm leaning towards including a customer audience_id
field in my login request and then setting the aud
in the token to an array of the client_id
and the audience_id
, but that feels like it just means that that token is valid for both those audiences
, which makes me think I should just add a custom claim called client
to specifically state that this token was created for a specific client.
I have not come across any implementations online that include both a client_id
and audience_id
(s) in an OAuth login request, nor do I see a reserved claim for client
in the spec.
Am I missing something here?
What is best practice for specifically stating a different client_id
and audience_id
in a JWT?
The audience of the JWT is the Resource Server as that is where the token will be processed, i.e. verified, inspected and acted upon. From RFC 7519, https://www.rfc-editor.org/rfc/rfc7519#section-4.1.3:
The "aud" (audience) claim identifies the recipients that the JWT is
intended for. Each principal intended to process the JWT MUST
identify itself with a value in the audience claim.
[...]
The interpretation of audience values is generally application specific.
[...]
So best practice is that aud
should identify the Resource Server.
The Client is only the presenter of the token and it is best practice (i.e. in OpenID Connect and some emerging OAuth 2.0 exension drafts) to use the azp
(Authorized Presenter) for that claim. From http://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken :
azp
OPTIONAL. Authorized party - the party to which the ID Token was issued. If present, it MUST contain the OAuth 2.0 Client ID of this party. This Claim is only needed when the ID Token has a single audience value and that audience is different than the authorized party.
[...]
So best practice is that azp
identifies the Client.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With