Authorization code flowv1.0+
This example configures the OpenID Connect plugin with an authorization code flow.
Here’s how the auth code flow works:
sequenceDiagram
autonumber
participant client as Client <br>(e.g. mobile app)
participant kong as Gateway
participant idp as IdP <br>(e.g. Keycloak)
participant httpbin as Upstream <br>(upstream service,<br> e.g. httpbin)
activate client
activate kong
client->>kong: HTTP request
kong->>client: Redirect mobile app to IDP
deactivate kong
activate idp
client->>idp: Request access and authentication<br>with client parameter
Note left of idp: /auth<br>response_type=code,<br>scope=openid
idp->>client: Login (ask for consent)
client->>idp: /auth with user credentials (grant consent)
idp->>client: Return authorization code and redirect
Note left of idp: short-lived authcode
activate kong
client->>kong: HTTP redirect with authorization code
deactivate client
kong->>kong: Verify authorization code flow
kong->>idp: Request ID token, access token, and refresh token
Note left of idp: /token<br>client_id:client_secret<br>authcode
idp->>idp: Authenticate client (Kong)<br>and validate authcode
idp->>kong: Returns tokens
Note left of idp: ID token, access token, and refresh token
deactivate idp
kong->>kong: Validate tokens
Note right of kong: Cryptographic<br>signature validation,<br>expiry check<br>(OIDC Standard JWT validation)
activate client
kong->>client: Redirect with session cookie<br>having session ID (SID)
Note left of kong: sid: cryptorandom bytes <br>(128 bits)<br>& HMAC protected
client->>kong: Authenticated request with session cookie
deactivate client
kong->>kong: Verify session cookie
Note right of kong: Retrieve encrypted tokens<br>from session store (redis)
activate httpbin
kong->>httpbin: Backend service request with tokens
Note right of idp: Access token and ID token
httpbin->>kong: Backend service response
deactivate httpbin
activate client
kong->>client: HTTP response
deactivate kong
deactivate clientFor a full example that shows you how to set up the authorization code flow with Keycloak, see Configure OpenID Connect with the auth code flow.
Note: Setting
config.client_authtoclient_secret_postlets you test the connection to your IdP, but we recommend using a more secure auth method in production. You can use any of the supported client auth methods.
Prerequisites
- A configured identity provider (IdP)
Environment variables
-
ISSUER: The issuer authentication URL for your IdP. For example, if you’re using Keycloak as your IdP, the issuer URL looks like this:http://localhost:8080/realms/example-realm -
CLIENT_ID: The client ID that the plugin uses when it calls authenticated endpoints of the IdP. -
CLIENT_SECRET: The client secret needed to connect to your IdP. -
TOKEN_SALT: A random string that decK requires (v1.59 and later) so session credentials aren’t regenerated on every sync. This parameter is optional for other formats. For example, generate one withopenssl rand -base64 16.