feat(web,core): enterprise-managed authorization (EMA) (#1509) (#1512)

Adds enterprise-managed authorization (EMA): browser-side IdP login + RFC 8693 token-exchange and JWT-bearer resource-token mint, per-server EMA opt-in in Server Settings, IdP config in Client Settings, and IdP clientSecret keychain storage. Includes the v2/main merge and review follow-ups (400 on malformed client config; normalizeIdpIssuer import consolidation).
This commit is contained in:
Bob Dickinson 2026-06-24 19:15:12 -07:00 • committed by GitHub
commit 5de4e911e3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1922,6 +1922,7 @@ export function createOAuthTestServerConfig(options: {
return {
oauth: {
enabled: true,
mode: "combined",
requireAuth: options.requireAuth ?? false,
scopesSupported: options.scopesSupported ?? ["mcp"],
staticClients: options.staticClients,
@ -1932,3 +1933,31 @@ export function createOAuthTestServerConfig(options: {
},
};
}
/**
* MCP resource server that delegates authorization to an external AS (EMA / XAA testing).
* Access tokens must be JWTs from that AS (signature + iss validated via JWKS).
*/
export function createExternalResourceOAuthTestServerConfig(options: {
authorizationServers: string[];
requireAuth?: boolean;
scopesSupported?: string[];
resource?: string;
accessTokenIssuers?: string[];
jwksUri?: string;
resourceAudience?: string;
}): Partial<ServerConfig> {
return {
oauth: {
enabled: true,
mode: "protected-resource",
authorizationServers: options.authorizationServers,
requireAuth: options.requireAuth ?? true,
scopesSupported: options.scopesSupported ?? ["mcp"],
resource: options.resource,
accessTokenIssuers: options.accessTokenIssuers,
jwksUri: options.jwksUri,
resourceAudience: options.resourceAudience,
},
};
}