Skip to main content

Authentication Overview

Every authenticated interaction with the JLR Data Hub is secured with OAuth2. Which grant type you use depends on who you are and what you are building. This page explains the grant/persona matrix and the two different token models - one for the REST API, one for MQTT streaming.

No client secrets

Clients authenticate at the token endpoint with a signed JWT client assertion (private_key_jwt), verified against the public certificate you upload when you create your credentials. There is no client_secret. See Client Assertion.

Which grant type do I use?​

PersonaGrant type(s)Used for
Vehicle owner / customerAuthorization Code + PKCE (browser) or Device Code (constrained device)REST API access to your own vehicle.
Vehicle owner / customerClient CredentialsMQTT streaming of your own vehicle data.

Two token models: REST vs streaming​

The platform exposes two independent, parallel solutions, and they secure requests differently. This is the single most important thing to understand about authentication here.

REST APIMQTT streaming
Token obtained viaAuthorization Code, Device Code, or Client CredentialsClient Credentials
How the token is presentedAuthorization: DPoP <access_token> headerAs the password on the MQTT connection
DPoP proof required?Yes - a fresh DPoP proof JWT per requestNo - DPoP is not used for streaming
TransportHTTPSMQTT over TLS (mqtts)

In other words: DPoP applies to the REST API only. When you connect an MQTT client, you authenticate by supplying your access token as the connection password

  • there is no DPoP proof involved. See DPoP for the REST side and Streaming for the MQTT side.

How it works (REST API)​

How it works (MQTT streaming)​

What a token can access​

The platform does not use developer-requested scopes. Instead, access is bound to the client configuration set at credential-creation time: you select the specific vehicles (VINs) and data categories your client may access.

A token issued to a client can only reach what that client was configured for. There is nothing to request at authentication time - and nothing to widen without changing the client's configuration in the portal.

Security model​

LayerMechanism
Client authenticationJWT client assertion - private_key_jwt (RFC 7523), verified against your uploaded public certificate
API authorizationOAuth2 Bearer token (JWT)
REST token bindingDPoP proof (RFC 9449)
Key algorithmPS256 (RSASSA-PSS, SHA-256)
Access-token lifetimeShort-lived (see Tokens & Refresh)
REST replay protectionUnique jti per DPoP proof
Streaming transportTLS (mqtts)

Authorization server​

All authentication happens on the dedicated Auth Server (the public realm), not on the API gateway. The REST API base URL (https://data.jlr-vcdp.com) is only for data endpoints.

The auth server base URL is:

https://auth.jlr-vcdp.com/realms/public

Its standard OpenID Connect endpoints:

EndpointURL
Authorizationhttps://auth.jlr-vcdp.com/realms/public/protocol/openid-connect/auth
Tokenhttps://auth.jlr-vcdp.com/realms/public/protocol/openid-connect/token
Device authorizationhttps://auth.jlr-vcdp.com/realms/public/protocol/openid-connect/auth/device

The full OIDC configuration is published at https://auth.jlr-vcdp.com/realms/public/.well-known/openid-configuration.

Next steps​