Admin portal
Implement Scalekit's self-serve admin portal to let customers configure SSO via a shareable link or embedded iframe
The admin portal provides a self-serve interface for customers to configure single sign-on (SSO) and directory sync (SCIM) connections. Scalekit hosts the portal and provides two integration methods: generate a shareable link through the dashboard or programmatically embed the portal in your application using an iframe.
This guide shows you how to implement both integration methods. For the broader customer onboarding workflow, see Onboard enterprise customers.
Generate shareable portal link No-code
Generate a shareable link through the Scalekit dashboard to give customers access to the admin portal. This method requires no code and is ideal for quick setup.
Create the portal link
- Log in to the Scalekit dashboard
- Navigate to Dashboard > Organizations
- Select the target organization
- Click Generate link to create a shareable admin portal link
The generated link follows this format:
https://your-app.scalekit.dev/magicLink/2cbe56de-eec4-41d2-abed-90a5b82286c4_pLink properties
| Property | Details |
|---|---|
| Expiration | Links expire after 7 days |
| Revocation | Revoke links anytime from the dashboard |
| Sharing | Share via email, Slack, or any preferred channel |
| Security | Anyone with the link can view and update the organization’s connection settings |
Embed the admin portal Programmatic
Embed the admin portal directly in your application using an iframe. This allows customers to configure SSO and SCIM without leaving your app, creating a seamless experience within your settings or admin interface.
The portal link must be generated programmatically on each page load for security. Each generated link is single-use and expires after 1 minute, though once loaded, the session remains active for up to 6 hours.
npm install @scalekit-sdk/nodepip install scalekit-sdk-pythongo get -u github.com/scalekit-inc/scalekit-sdk-go/* Gradle users - add the following to your dependencies in build file */implementation "com.scalekit:scalekit-sdk-java:2.0.6"<!-- Maven users - add the following to your `pom.xml` --><dependency> <groupId>com.scalekit</groupId> <artifactId>scalekit-sdk-java</artifactId> <version>2.0.6</version></dependency>Generate portal link
Use the Scalekit SDK to generate a unique, embeddable admin portal link for an organization. Call this API endpoint each time you render the page containing the iframe.
6 collapsed lines
import { Scalekit } from '@scalekit-sdk/node';
const scalekit = new Scalekit( process.env.SCALEKIT_ENVIRONMENT_URL, process.env.SCALEKIT_CLIENT_ID, process.env.SCALEKIT_CLIENT_SECRET,);
async function generatePortalLink(organizationId) { const link = await scalekit.organization.generatePortalLink(organizationId); return link.location; // Use as iframe src}6 collapsed lines
from scalekit import Scalekitimport os
scalekit_client = Scalekit( environment_url=os.environ.get("SCALEKIT_ENVIRONMENT_URL"), client_id=os.environ.get("SCALEKIT_CLIENT_ID"), client_secret=os.environ.get("SCALEKIT_CLIENT_SECRET"))
def generate_portal_link(organization_id): link = scalekit_client.organization.generate_portal_link(organization_id) return link.location # Use as iframe src10 collapsed lines
import ( "context" "os"
"github.com/scalekit/sdk-go")
scalekitClient := scalekit.New( os.Getenv("SCALEKIT_ENVIRONMENT_URL"), os.Getenv("SCALEKIT_CLIENT_ID"), os.Getenv("SCALEKIT_CLIENT_SECRET"),)
func generatePortalLink(organizationID string) (string, error) { ctx := context.Background() link, err := scalekitClient.Organization.GeneratePortalLink(ctx, organizationID) if err != nil { return "", err } return link.Location, nil // Use as iframe src}8 collapsed lines
import com.scalekit.client.Scalekit;import com.scalekit.client.models.Link;import com.scalekit.client.models.Feature;import java.util.Arrays;
Scalekit scalekitClient = new Scalekit( System.getenv("SCALEKIT_ENVIRONMENT_URL"), System.getenv("SCALEKIT_CLIENT_ID"), System.getenv("SCALEKIT_CLIENT_SECRET"));
public String generatePortalLink(String organizationId) { Link portalLink = scalekitClient.organizations() .generatePortalLink(organizationId, Arrays.asList(Feature.sso, Feature.dir_sync)); return portalLink.getLocation(); // Use as iframe src}The API returns a JSON object with the portal link. Use the location property as the iframe src:
{ "id": "8930509d-68cf-4e2c-8c6d-94d2b5e2db43", "location": "https://random-subdomain.scalekit.dev/magicLink/8930509d-68cf-4e2c-8c6d-94d2b5e2db43", "expireTime": "2024-10-03T13:35:50.563013Z"}<iframe src="https://random-subdomain.scalekit.dev/magicLink/8930509d-68cf-4e2c-8c6d-94d2b5e2db43" width="100%" height="600" frameborder="0" allow="clipboard-write"></iframe>Embed the portal in your application’s settings or admin section where customers manage authentication configuration.
Configuration and session
| Setting | Requirement |
|---|---|
| Redirect URI | Add your application domain at Dashboard > Developers > API Configuration |
| iframe attributes | Include allow="clipboard-write" for copy-paste functionality |
| Dimensions | Minimum recommended height: 600px |
| Link expiration | Generated links expire after 1 minute if not loaded |
| Session duration | Portal session remains active for up to 6 hours once loaded |
| Single-use | Each generated link can only be used once to initialize a session |
Customize the admin portal
Match the admin portal to your brand identity. Configure branding at Dashboard > Settings > Branding:
| Option | Description |
|---|---|
| Logo | Upload your company logo (displayed in the portal header) |
| Accent color | Set the primary color to match your brand palette |
| Favicon | Provide a custom favicon for browser tabs |
For additional customization options including custom domains, see the Custom domain guide.