[Proposal][Devportal] Standalone Key Manager Support for DevPortal #1693
Piumal1999
started this conversation in
Ideas
Replies: 1 comment
-
Database ChangesNew table:
|
| Column | Description |
|---|---|
KEY_ID |
Primary key. Serves as the keyMappingId returned to clients and used in subsequent token/revoke/update calls. |
APP_ID |
FK → DP_APPLICATION. The application that owns these credentials. Cascade-deletes when the app is deleted. |
ORG_ID |
Tenant scoping — all queries filter by org. |
TOKEN_TYPE |
OAUTH (Stage 1) or API_KEY (Stage 2). Differentiates row purpose so both key types share the table. |
KEY_TYPE |
PRODUCTION or SANDBOX. |
KEY_MANAGER |
Name of the KM that issued the credential (from config.keyManager.name). Enables future multi-KM support. |
CLIENT_ID |
OAuth client_id issued by the KM via DCR. |
CLIENT_SECRET_ENC |
OAuth client_secret encrypted with AES-256-GCM. Decrypted in memory only for server-side token generation. Not needed if the portal does not perform server-side token generation (display-once flow). |
SCOPES |
Space-separated OAuth scopes granted to this client. |
GRANT_TYPES |
Space-separated OAuth grant types the client is registered for. |
CALLBACK_URL |
Redirect URI registered with the KM for authorization_code flow. |
ADDITIONAL_PROPS |
KM-specific extra fields from DCR (stored as JSONB for round-trip fidelity). |
STATUS |
ACTIVE or REVOKED. |
CREATED_AT / UPDATED_AT |
Audit timestamps. |
No changes to existing tables (Stage 1)
DP_APPLICATION, DP_APP_KEY_MAPPING, DP_API_SUBSCRIPTION, and all other existing tables are unchanged. CP_APP_REF in DP_APP_KEY_MAPPING is kept as-is — in standalone mode the portal can write the local APP_ID into it as a self-reference.
REST API Changes
The portal's external REST API surface is unchanged — all existing endpoints keep the same paths, methods, and request/response shapes. The difference is in how the portal fulfills them internally.
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Problem
The developer portal currently relies on the bijira control plane (CP) for all key management operations: OAuth2 client registration, token generation, API key issuance, and subscription lifecycle. Therefore the devportal cannot function independently without the control plane.
Example:
This coupling makes standalone deployments difficult because key operations depend on Control Plane. Standalone DevPortal users require the ability to use their own key managers with minimal setup and without a runtime dependency on Control Plane.
Solution
Provide the ability to custom-configure a key manager and execute key-related operations through it, without a runtime dependency on Control Plane. In standalone mode, DevPortal should use a configured key manager with minimal setup, while in Control Plane mode it should continue to work as before.
First-time devportal setup experience should be like:
tokenUrlandclientId.Goals
config.jsonDesign
Modes of Operation
controlPlane.enabled: truecontrolPlane.enabled: false,keyManager.enabled: trueConfiguration
A new
keyManagerblock is added toconfig.json(orconfig.tomlin future):Implementation Stage 1: OAuth2 Keys
What changes
In standalone mode, the portal handles OAuth2 client registration and token operations by talking directly to the KM using standard protocols.
Generated credentials (client ID, encrypted client secret, scopes, grant types) are stored in the portal's own database rather than the control plane.
User flows
Generate OAuth2 credentials for an application
client_idandclient_secretclient_idandclient_secretto the userclient_secretis shown once — the user must copy it at this pointGenerate an access token
client_credentialsgrant) using the stored credentialsUpdate OAuth2 credentials (scopes / grant types / callback URL)
Revoke OAuth2 credentials
Beta Was this translation helpful? Give feedback.
All reactions