Okta — OAuth Setup
This guide sets up Okta as the Authorization Server for the MCP server. The approach uses a Custom Authorization Server (recommended over the Org AS for API access).
These steps are best-effort — verify specifics with your Okta admin, as UI paths change across Okta releases.
Step 1: Create a Custom Authorization Server
- In the Okta Admin Console, navigate to Security → API → Authorization Servers.
- Click Add Authorization Server.
- Name:
illumio-mcp - Audience:
https://mcp.illumio.example(this becomesMCP_OAUTH_AUDIENCE) - Description:
Illumio MCP Server resource - Click Save.
Note the Issuer URI from the Authorization Server overview — it becomes MCP_OAUTH_ISSUER.
Step 2: Add the illumio-mcp.use scope
- In the Authorization Server, go to the Scopes tab.
- Click Add Scope.
- Name:
illumio-mcp.use - Display phrase:
Access Illumio MCP Server - User consent: check if you want users to explicitly grant consent.
- Click Create.
Step 3: Configure a groups claim
The server reads the groups or roles claim from the access token to map users to MCP roles.
- In the Authorization Server, go to the Claims tab.
- Click Add Claim.
- Name:
groups - Include in token type: Access Token, Always.
- Value type: Groups
- Filter: Matches regex
.*(all groups), or restrict to a specific prefix likesg-illumio.*. - Include in: Any scope.
- Click Create.
Verify with your Okta admin — the exact filter type (Starts with, Matches regex, Equals) depends on your group naming convention.
Step 4: Create an OAuth Application for each MCP client
For each MCP client (Claude Desktop, Cursor, MCP Inspector):
- Navigate to Applications → Applications → Create App Integration.
- Sign-in method: OIDC – OpenID Connect.
- Application type: Native Application (for desktop clients) or Single-Page Application (for browser-based tools like MCP Inspector).
- Grant type: Authorization Code with PKCE.
- Sign-in redirect URIs: Add the redirect URI for the specific client (e.g.,
http://localhostfor Claude Desktop,http://localhost:6274/oauth/callbackfor MCP Inspector — verify with your IdP admin). - Under Assignments, assign users or groups.
Step 5: Collect env vars
export MCP_PUBLIC_URL=https://mcp.illumio.example
# Issuer from the Authorization Server overview:
export MCP_OAUTH_ISSUER=https://<your-okta-domain>/oauth2/<auth-server-id>
# JWKS from the Authorization Server's metadata:
export MCP_OAUTH_JWKS_URL=https://<your-okta-domain>/oauth2/<auth-server-id>/v1/keys
export MCP_OAUTH_AUDIENCE=https://mcp.illumio.example
export MCP_OAUTH_REQUIRED_SCOPE=illumio-mcp.use
# Role mapping — use Okta group names (not IDs) as they appear in the groups claim
export MCP_ROLE_GROUPS_ADMIN=sg-illumio-mcp-admin
export MCP_ROLE_GROUPS_OPERATOR=sg-illumio-mcp-operator,sg-illumio-mcp-admin
export MCP_ROLE_GROUPS_READER=sg-illumio-mcp-readonly,sg-illumio-mcp-operator,sg-illumio-mcp-admin
Troubleshooting
- 401
iss mismatch: Theissin the token must exactly matchMCP_OAUTH_ISSUER. For Custom AS, it includes the AS ID path segment; for the Org AS, it is just your Okta domain. Verify by decoding an access token. groupsclaim missing: The claim was not added, or the scope filter excludes the user’s groups. Check the claim policy under the Authorization Server.- Verify with your Okta admin if unsure about Application types, redirect URIs, or group filter syntax.