About Portal
Learn more about common challenges with API portals and how Solo Enterprise for kgateway’s portal fills the gaps.
Portal is a developer portal for Solo Enterprise for kgateway that lets API consumers discover, browse, and interact with APIs. The portal renders an API catalog from OpenAPI specifications and provides self-service features, including team management, app registration, and API key provisioning.
Challenges of API management
Managing APIs across a modern platform introduces challenges that go beyond simple routing and security. Review the most common pain points that organizations face.
- Managing APIs at scale: As the number of microservices grows, manually registering, organizing, and documenting APIs becomes unmanageable. You need a way to onboard APIs without disrupting existing deployment workflows, bundle them into meaningful products for different consumers, and keep documentation automatically in sync without requiring portal admins to intervene for every change.
- Controlling access for the right audiences: Not all APIs should be accessible to everyone. You might need separate portals for internal teams, external partners, or end users, each with different visibility and access rules. Managing who can access which APIs and ensuring they authenticate correctly can quickly become complex when you have multiple audiences and deployment environments.
- Delivering a great developer experience: API consumers need a self-service experience to be productive. Without a branded, easy-to-navigate web UI, interactive documentation, and the ability to generate their own credentials without opening support tickets, adoption of your APIs suffers and your portal admins become a bottleneck.
Developer portal as the solution
A developer portal brings together the tools that API producers and consumers need in one place. Rather than managing API documentation, access control, and credentials across separate systems, a developer portal creates a single, structured layer between your backend services and the teams that consume them.
For API developers, a portal provides a consistent way to register APIs, define products across multiple services, and publish documentation that stays in sync with the underlying services without changing how applications are deployed.
For API consumers, a portal provides a self-service experience to discover APIs, review interactive documentation, request access, and manage credentials. A developer portal can significantly reduce the dependency on admin support and accelerate onboarding.
For platform and security teams, a portal provides centralized access control through subscription workflows, authentication policies, and rate limiting, making it easier to enforce governance across many teams and environments.
Solo Enterprise for kgateway Portal is built on these principles, extending the routing and security capabilities of kgateway with a full developer portal experience.
Key features
Review the following key features to see how Portal addresses common API management challenges.
| Feature | Description |
|---|---|
| API registration | Register your APIs in Portal by creating ApiDoc resources that pair an OpenAPI schema with a backend service. You can inline the schema directly, fetch it from an external URL, or pull it from an endpoint exposed by an in-cluster service. Once created, the portal controller automatically renders the documentation in the portal frontend. For more information, see Create ApiDocs. |
| Flexible API products | Bundle multiple APIs into versioned ApiProducts with custom metadata such as titles, descriptions, terms of service, and lifecycle status. Product owners decide which APIs to group together and how to expose them, independent of how developers deploy their services. For more information, see Create ApiProducts. |
| Automated API documentation | Portal automatically stitches together OpenAPI schemas from your services and renders them in the portal frontend. Documentation stays in sync with your APIs without manual updates. For more information, see Create ApiDocs. |
| Subscription-based access control | Portal users request subscriptions to API products through the portal frontend. Admins approve or reject subscriptions, giving you controlled, auditable access management for different teams and audiences. For more information, see Manage subscriptions. |
| Self-service credentials | Portal users can generate their own API keys or register OAuth clients directly from the portal frontend — no admin intervention required. Credentials are automatically scoped to the API products the user is subscribed to. For more information, see Set up credential management. |
| Rate limiting per subscription | Apply rate limits to API products to control consumption and enforce usage tiers per API key or OAuth client. For more information, see Set up rate limiting. |
| Customizable portal frontend | Deploy a portal frontend app that you can brand and customize for your organization. Portal users can browse the API catalog, view interactive documentation, and manage their own credentials and subscriptions. For more information, see Build the portal app. |
Key concepts
Review the following key concepts to understand the resources that are used in Portal.
- Portal: A developer portal instance. Creating a Portal CR instructs the controller to deploy a backend web server that serves the API catalog via a REST API.
- ApiProduct: A logical API product with one or more versions. Each version references HTTPRoutes, and the controller automatically discovers and stitches together the OpenAPI schemas for the backends behind those routes.
- ApiDoc: An OpenAPI schema document paired with the backend service it describes. ApiDocs can be authored manually, fetched from a URL, or discovered from an in-cluster service.
- PortalParameters: Operational configuration for a Portal instance, including the data store, web server resources, and identity provider.
Architecture
Review the portal architecture and how the portal resources are connected.
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#cce5ff", "primaryBorderColor": "#3399ff", "primaryTextColor": "#003366", "lineColor": "#3399ff", "edgeLabelBackground": "#e8f4ff", "clusterBkg": "#fafafa", "clusterBorder": "#e0e0e0", "secondaryColor": "#e8f4ff", "tertiaryColor": "#ffffff"}}}%%
flowchart LR
subgraph "User-Created Resources"
Portal[Portal CR]
PP[PortalParameters]
AP[ApiProduct]
AD[ApiDoc]
HR[HTTPRoute]
Svc[Service / Backend]
end
subgraph "Controller-Managed"
PC[PortalConfig]
SAD[Stitched ApiDoc]
WS[Portal Web Server]
end
FE[Frontend UI]
Portal -->|parametersRef| PP
Portal -->|apiProductRefs| AP
AP -->|versions.targetRefs| HR
HR -->|backendRefs| Svc
AD -->|servedBy| Svc
AP -.->|controller generates| SAD
Portal -.->|controller generates| PC
Portal -.->|controller deploys| WS
FE -->|REST API| WS
WS -->|reads| PC
WS -->|reads| SAD
Access control model
Portal uses a four-layer model to control who can access the portal, who can see the API catalog, and who can call the APIs.
Layer 1: API visibility in the catalog
Use the visibility field in the Portal custom resource to configure the visibility of APIs in the developer portal. Choose from the following settings:
| Setting | Description |
|---|---|
visibility.public: true | If a Portal’s visibility is set to public, a portal user can browse the API endpoints and documentation for all API products that were added to the portal without logging into the portal. However, access to an API is not granted until a valid API subscription is created and approved by a portal admin. |
visibility.public: false | APIs are hidden in the API catalog by default. Portal users must log in to the portal by using an OIDC authentication flow that the portal admin sets up. After logging in, portal users can browser APIs and view their documentation. However, access to the API is not granted until a valid API subscription is created and approved by a portal admin. |
Example Portal custom resource with public APIs:
kubectl apply -f- <<EOF
apiVersion: portal.solo.io/v1alpha1
kind: Portal
metadata:
name: my-portal
namespace: default
spec:
parametersRef:
name: portal-params
visibility:
public: true
apiProductRefs:
- name: httpbin-api
EOFLayer 2: Portal frontend authentication
Portal frontend authentication is optional for browsing the API catalog and viewing API documentation. However, authentication is required for subscription management and self-service API credentials.
When authentication is enabled and a portal user logs in to the portal frontend by using the Login button, the frontend redirects unauthenticated users to an identity provider via an OIDC authentication flow. On successful login, the portal receives an ID token and uses its group claims to determine the user’s role, such as whether they have admin privileges.
To enable portal frontend authentication, configure an OIDC identity provider in the PortalParameters resource. For more information, see Secure login.
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#cce5ff", "primaryBorderColor": "#3399ff", "primaryTextColor": "#003366", "lineColor": "#3399ff", "edgeLabelBackground": "#e8f4ff", "clusterBkg": "#fafafa", "clusterBorder": "#e0e0e0", "secondaryColor": "#e8f4ff", "tertiaryColor": "#ffffff"}}}%%
sequenceDiagram
actor User
participant Frontend as Portal Frontend
participant IdP as OIDC Provider
participant Backend as Portal Backend
User->>Frontend: Visit portal
Frontend->>User: Redirect to OIDC login
User->>IdP: Authenticate
IdP->>Frontend: Return ID token with group claims
Frontend->>Backend: Requests include ID token
Backend->>Frontend: Serve catalog and user data based on group claims
Layer 3: Subscriptions
When portal users have access to the portal frontend, they can start browsing APIs and review their API documentation. However to access an API, the portal user must belong to a team that owns an app that has an approved API subscription. Subscriptions are requested per app and approved by a portal admin.
Review the following diagram to understand how to set up a team, apps, and API subscriptions. For more information, see Create teams, apps, and subscriptions.
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#cce5ff", "primaryBorderColor": "#3399ff", "primaryTextColor": "#003366", "lineColor": "#3399ff", "edgeLabelBackground": "#e8f4ff", "clusterBkg": "#fafafa", "clusterBorder": "#e0e0e0", "secondaryColor": "#e8f4ff", "tertiaryColor": "#ffffff"}}}%%
sequenceDiagram
actor User
participant Frontend as Portal Frontend
participant Backend as Portal Backend
participant API as API Service
actor Admin
Note over User,Backend: Create teams and apps
User->>Frontend: Create team
Frontend->>Backend: POST /v1/teams
User->>Frontend: Register app that consumes <br/> the API
Frontend->>Backend: POST /v1/apps
Note over User,Admin: Create and approve subscriptions
User->>Frontend: Request subscription to ApiProduct <br/> on behalf of an app
Frontend->>Backend: POST /v1/subscriptions
Backend->>Admin: Subscription pending approval
Admin->>Backend: Approve or reject subscription <br/>(requires groups: admin claim in ID token)
Backend-->>Frontend: Subscription status updated
User->>API: Interact with API (with valid credential)
Layer 4: API authentication
After a subscription is approved, requests to the API can be protected so that only credentialed requests are allowed through.
To obtain credentials to access an API, portal admins must first set up credential enforcement for the API. You can choose between API keys and OAuth clients to protect APIs. Then, portal users can self-service credentials via the portal frontend. Credentials are scoped to the ApiProduct the user subscribed to.
Review the following diagram to understand how portal users obtain API credentials and authenticate to access an API. For more information, see Set up API credential management and Create API credentials.
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#cce5ff", "primaryBorderColor": "#3399ff", "primaryTextColor": "#003366", "lineColor": "#3399ff", "edgeLabelBackground": "#e8f4ff", "clusterBkg": "#fafafa", "clusterBorder": "#e0e0e0", "secondaryColor": "#e8f4ff", "tertiaryColor": "#ffffff"}}}%%
sequenceDiagram
actor User
participant Frontend as Portal Frontend
participant IdP as OIDC Provider
participant Backend as Portal Backend
participant Gateway as Gateway
participant API as API Service
Note over User,IdP: Login
User->>Frontend: Log in to the portal
Frontend->>IdP: Redirect to OIDC login
User->>IdP: Authenticate
IdP->>Frontend: Return ID token with group claims
Note over User,Backend: Credential generation
alt API key
User->>Frontend: Generate API key for app
Frontend->>Backend: POST /v1/apps/{id}/api-keys
Backend->>Frontend: Return API key (shown once)
else OAuth client
User->>Frontend: Register OAuth client for app
Frontend->>Backend: POST /v1/apps/{appID}/oauth-credentials
Backend->>Frontend: Return client ID and secret
end
Note over User,API: API access
User->>Gateway: Call API with credential
Gateway->>Backend: Validate credential and <br/>subscription (portalAuth)
Backend->>Gateway: Approved
Gateway->>API: Forward request
API-->>Gateway: Response
Gateway-->>User: Return response