oauthoauth-2.0jwt

JWT (Json Web Token) Audience "aud" versus Client_Id - What's the difference?


I'm working on implementing OAuth 2.0 JWT access_token in my authentication server. But, I'm not clear on what the differences are between the JWT aud claim and the client_id HTTP header value. Are they the same? If not, can you explain the difference between the two?

My suspicion is that aud should refer to the resource server(s), and the client_id should refer to one of the client applications recognized by the authentication server (i.e. web app, or iOS app).

In my current case, my resource server is also my web app client.


Solution

  • As it turns out, my suspicions were right. The audience aud claim in a JWT is meant to refer to the Resource Servers that should accept the token.

    As this post simply puts it:

    The audience of a token is the intended recipient of the token.

    The audience value is a string -- typically, the base address of the resource being accessed, such as https://contoso.com.

    The client_id in OAuth refers to the client application that will be requesting resources from the Resource Server.

    The Client app (e.g. your iOS app) will request a JWT from your Authentication Server. In doing so, it passes its client_id and client_secret along with any user credentials that may be required. The Authorization Server validates the client using the client_id and client_secret and returns a JWT.

    The JWT will contain an aud claim that specifies which Resource Servers the JWT is valid for. If the aud contains www.myfunwebapp.com, but the client app tries to use the JWT on www.supersecretwebapp.com, then access will be denied because that Resource Server will see that the JWT was not meant for it.